Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#中的列表、数组和元组之间有什么区别?_F# - Fatal编程技术网

F#中的列表、数组和元组之间有什么区别?

F#中的列表、数组和元组之间有什么区别?,f#,F#,F#中的列表、数组和元组之间有什么区别?在需要时在它们之间转换是否容易?它们在精神上看起来都很相似,那么,我需要知道什么才能让我理解何时使用它们 A是一组未命名的有序值。元组中的每个值不需要是相同的类型,这意味着您可以将元组定义为: let someTuple = (1, "foo", 42.3) 这将创建一个包含int、string和float值的元组 A是相同类型的值的有序集合,它是不可变的。这可能是函数式编程中使用的最常见的集合类型,因为它是完全不可变的,并且有许多功能用于创建在先前创建

F#中的列表、数组和元组之间有什么区别?在需要时在它们之间转换是否容易?它们在精神上看起来都很相似,那么,我需要知道什么才能让我理解何时使用它们

A是一组未命名的有序值。元组中的每个值不需要是相同的类型,这意味着您可以将元组定义为:

let someTuple = (1, "foo", 42.3)
这将创建一个包含int、string和float值的元组

A是相同类型的值的有序集合,它是不可变的。这可能是函数式编程中使用的最常见的集合类型,因为它是完全不可变的,并且有许多功能用于创建在先前创建的列表之上构建的列表,这允许您创建“增长”的集合(但是,它们实际上是新的集合,因为列表是不可变的)

是一个固定大小、可变的集合。它们的创建效率很高,但必须始终是单一类型

在需要时在它们之间转换是否容易

在列表和数组之间进行转换非常容易。您可以使用
List.ofArray
List.toArray
Array.ofList
Array.toList
在类型之间进行转换

从元组到数组或列表的转换并不常见,也不总是可能的,因为元组允许在其中存储多种类型

它们在精神上看起来都很相似,那么,我需要知道什么才能让我理解何时使用它们

列表和数组都用于集合。一般来说,如果要创建“增长”的列表,您可能会更喜欢列表,因为创建一个由元素+原始列表组成的新列表要比使用数组做同样的事情更有效

阵列通常用于更高性能的场景(它们具有更好的内存局部性,更节省空间,等等),但它们是可变的和固定大小的,因此当您尝试构建集合时,它们通常并不理想

元组通常用于完全不同的场景。元组最常见的用例是将多个项作为一个值传递。例如,当使用具有
out
参数的框架方法时,这会自动发生,因此您将看到如下用例:

let (success, value) = int.TryParse(someString)

在这种情况下,将自动创建元组,然后进行模式匹配,以提取单行代码中的值。与其将元组视为“集合”,不如将多个值(通常是不同类型的值)保存在一起。

关于使用集合类型:

时列出:您需要一个大小变化的动态集合。列表是一个单向链表,所以请记住,列表的每个成员都需要4或8字节的额外内存来存储指向下一个列表元素的指针

数组时:需要存储大量基本值,如整数、浮点或字节。数组表示为这些值保留的静态内存块,当您必须存储图像的字节时,这是非常有效的

其他有用的收藏:

设置时间:您需要存储一个设置。集合是唯一值的集合。集合具有计算差分、并集和交集的有用函数。例如,你可能有一组所有的人(A)和一组买糖果的人(B),所以你现在可以计算A-B=C,现在你有了一组C,代表那些没有买糖果的人

映射时:需要从一个值到另一个值的投影。在前面的示例中,您计算了集合C(不买糖果的人),您可能使用了一些id来描述这些人。现在,您可以使用Map:)将此id投影到person记录


我希望这是有用的。

(注意:我怀疑这是一个原始问题,但stackoverflow的类似问题建议者没有为我找到重复…@Reed我根据您的答案构建了一个网格。到处都是洞。你能把洞补上吗?可编辑电子表格: