上下文:Microsoft Visual Studio 2015社区;F#
我每天学习F#大约1/2。我迷恋于mlite的一年来对如何进行函数式编程的想法确实含糊不清。
以下脚本遍历文件夹树并提取日志文件。这些文件的条目由分隔,~
并且那里可能有一个或多个。
open System
open System.IO
let files =
System.IO.Directory.GetFiles("C:\\scratch\\snapshots\\", "*.log", SearchOption.AllDirectories)
let readFile (file: string) =
//Console.WriteLine(file)
let text = File.ReadAllText(file)
text
let dataLines (line: string) =
line.Split('~')
let data =
files |> Array.map readFile |> Array.map dataLines
因此,此时data
包含a,String[][]
而我不知所措,想出如何将其转换为aString[]
的想法是,我想将所有对数转换为一个长向量,以便我可以对on进行其他一些转换。它。例如,每条日志行都以日期时间开头,因此将其全部变成一个长列表,然后我就可以对日期时间进行排序。
从这里到哪里?
如评论中所述,您可以使用Array.concat
:
files |> Array.map readFile |> Array.map dataLines |> Array.concat
现在进行一些重构,两个映射的组成等同于两个函数的组成的映射。
files |> Array.map (readFile >> dataLines) |> Array.concat
最后map >> concat
等于collect
。因此,您的代码变为:
files |> Array.collect (readFile >> dataLines)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句