从String[]到F# List的高效转换方法

8

我从C#背景开始学习F#,对不同的列表和集合了解较少。最近我遇到一个问题,需要将string[]转换为'T list。最终我使用了列表理解来进行强制类型转换:

let lines = File.ReadAllLines(@"C:\LinesOText.txt") // returns a string array
let listOLines = [for l in lines -> l] // use list comprehension to get the f# list

有没有更有效率的方法进行转换?
3个回答

13

1
@JoshuaBelden:我认为你正在观察其他因素,它们都调用相同的内部函数。请参见此处此处 - Daniel
如果有疑问,就进行反向工程分析。F#代码库是一个很好的信息源。我需要一个小插件,这样你就可以点击“显示定义”,然后它会带你到GitHub仓库... - 7sharp9

3
这应该可以做到:
let lines = File.ReadAllLines(@"C:\LinesOText.txt") |> List.ofArray

2
以下是另一种方法:

let listOfLines = [yield! File.ReadAllLines(@"C:\LinesOText.txt")]

2
我真的很喜欢这里的语法,但在一个包含10万个整数的数组上,它比Array.toList和List.ofArray慢大约25%。 - Joshua Belden
1
作为一种语言结构,“yield!”更加通用,需要更多的管道。我主要是为了完整性而包含它;当性能不是问题时,它可以节省一些按键。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接