如何在F#中连接列表(和其他集合)?

Tim*_*ith 15 f# list concatenation

F#是否提供了连接的惯用方法

  • 序列和列表在一起?
  • 列表并列在一起列表?(非破坏性)
  • 列表并列出一个列表,如果它是破坏性的?
  • 可破坏的数组一起破坏性地进入另一个可变数组?

你也可以连接元组吗?

Tom*_*cek 15

序列和列表在一起

这没有特殊功能.如果序列是第一个而列表是第二个,那么你必须选择将第一个转换为列表(然后在使用时附加时将其复制List.append)或者使用Seq.append后面的List.ofSeq列表将复制两个列表.

因此编写自己的函数是有意义的.

列表并列在一起列表?(非破坏性)

List.append 做这个.

列表并列出一个列表,如果它是破坏性的

列表是不可变的,所以没有破坏性的追加.

可破坏的数组一起破坏性地进入另一个可变数组?

在.NET中,您无法调整数组大小,因此没有破坏性的方法.Array.append创建一个新数组(并且比其他选项更快,因为它事先知道结果的大小).

你也可以连接元组吗?

不.类型系统不允许您表示将附加元组的函数的类型(它们必须具有静态已知的大小).

  • 还有`@`运算符,我认为它与`List.append`相同. (20认同)

McG*_*gus 8

@ 操作符是一种连接多个列表的简单而整洁的方法:

let allElements = list1 @ list2 @ list3 @ list4 @ list5 @ list6
Run Code Online (Sandbox Code Playgroud)

  • 应该提到的是,@ 操作符(和 List.append)可能非常慢。因此,如果性能是一个问题,则应通过递归调用 cons 运算符 :: 将头部从一个列表复制到另一个列表来避免它们。 (2认同)