我刚刚开始使用 F# 并试图了解典型的习惯以及有效的思维和工作方式。
手头的任务是将制表符分隔的文件简单地转换为逗号分隔的文件。典型的输入行如下所示:
let line = "@ES# 01/31/2006 13:31:00 1303.00 1303.00 1302.00 1302.00 2514 0"
我从这样的循环代码开始:
// inFile and outFile defined in preceding code not shown here
for line in File.ReadLines(inFile) do
let typicalArray = line.Split '\t'
let transformedLine = typicalArray |> String.concat ","
outFile.WriteLine(transformedLine)
然后我用一个 Regex.Replace() 替换了 split/concat 对操作:
for line in File.ReadLines(inFile) do
let transformedLine = Regex.Replace(line, "\t",",")
outFile.WriteLine(transformedLine)
现在,终于用管道代替了循环:
File.ReadLines(inFile)
|> Seq.map (fun x -> Regex.Replace(x, "\t", ","))
|> Seq.iter (fun y -> outFile.WriteLine(y))
// other housekeeping code below here not shown
虽然所有版本都有效,但在我看来,最终版本是最直观的。这就是更有经验的 F# 程序员完成这项任务的方式吗?