bug*_*net 1 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
Run Code Online (Sandbox Code Playgroud)
所以在这一点data包含一个String[][],我有点不知道如何把它变成一个String[],这个想法是我想把所有的日志转换成一个长向量,这样我就可以做一些其他的转换它.例如,每个日志行都以日期时间开始,因此将其全部转换为一个长列表,然后我可以对日期时间进行排序.
从哪里来?
如评论中所述,您可以使用Array.concat:
files |> Array.map readFile |> Array.map dataLines |> Array.concat
Run Code Online (Sandbox Code Playgroud)
现在进行一些重构,两个映射的组合相当于两个函数组成的映射.
files |> Array.map (readFile >> dataLines) |> Array.concat
Run Code Online (Sandbox Code Playgroud)
最后map >> concat相当于collect.所以你的代码变成:
files |> Array.collect (readFile >> dataLines)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |