数组类型可以直接替换序列类型吗?

dag*_*lee 0 f# sequence

以下代码有效.

Seq.iter (printfn "%d") [|1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]
Run Code Online (Sandbox Code Playgroud)

这是另一个例子.http://msdn.microsoft.com/en-us/library/ee340408.aspx

数组类型可以直接替换序列类型吗?

Joh*_*mer 5

这是有效的,因为数组被隐式转换为seq<'T>(这种转换发生的少数几个点之一).

但是,某些Seq函数没有针对数组进行优化,并且执行速度比等效Array.x函数慢.因此,你应该使用哪一个曾经模块匹配与输入(List.x用于Lists Array.xArrays等).此外,返回类型将不同 - 如果您Seq.map在数组上使用,Seq则返回a而不是Array可能具有性能影响的a(例如,获取第n个元素对于数组来说明显更快).

  • +1除此之外,虽然使用与输入匹配的函数的建议很有意义,但我通常默认使用`Seq.xyz`函数(它们提供更多功能并且是懒惰的)并且只有在有充分理由时才使用其他函数(即我关心性能或想要功能列表样式处理). (2认同)