F#中的列表、数组和元组之间有什么区别?
F#中的列表、数组和元组之间有什么区别?在需要时在它们之间转换是否容易?它们在精神上看起来都很相似,那么,我需要知道什么才能让我理解何时使用它们 A是一组未命名的有序值。元组中的每个值不需要是相同的类型,这意味着您可以将元组定义为:F#中的列表、数组和元组之间有什么区别?,f#,F#,F#中的列表、数组和元组之间有什么区别?在需要时在它们之间转换是否容易?它们在精神上看起来都很相似,那么,我需要知道什么才能让我理解何时使用它们 A是一组未命名的有序值。元组中的每个值不需要是相同的类型,这意味着您可以将元组定义为: let someTuple = (1, "foo", 42.3) 这将创建一个包含int、string和float值的元组 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我根据您的答案构建了一个网格。到处都是洞。你能把洞补上吗?可编辑电子表格: