如何在F#中遍历String [] []

时间:2016-06-04 04:53:15

标签: f# visual-studio-2015

上下文:Microsoft Visual Studio 2015社区; F#

我每天都在学习F#约半天。我对如何进行函数式编程有一个模糊的想法,花了一年的时间来摆弄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包含一个String[][]而且我有点茫然无法弄清楚如何将其变成String[],这个想法是我想将所有日志转换为一个长向量,以便我可以对其进行一些其他转换。例如,每个日志行都以日期时间开始,因此将其全部转换为一个长列表,然后我可以对日期时间进行排序。

从哪里来?

1 个答案:

答案 0 :(得分:6)

如评论中所述,您可以使用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)