F#:将一系列序列展平为单个Seq

Gly*_*kin 6 f# f#-scripting

我正在尝试构建一个包含多个文件内容的单个序列,以便对其进行排序然后传递给图形组件.但是我一直试图将每个文件的内容折叠在一起.下面的伪代码不会编译,但希望将显示我想要实现的目的.

任何帮助,非常感谢.

open System.IO 

let FileEnumerator filename = seq { 
        use sr = System.IO.File.OpenText(filename)
           while not sr.EndOfStream do 
           let line = sr.ReadLine()
            yield line 
}

let files = Directory.EnumerateFiles(@"D:\test_Data\","*.csv",SearchOption.AllDirectories)

let res =
   files 
        |> Seq.fold(fun x item -> 
        let lines =  FileEnumerator(item)
        let sq = Seq.concat x ; lines
        sq
    ) seq<string>

printfn "%A" res
Run Code Online (Sandbox Code Playgroud)

Tay*_*ick 12

您实际上是在尝试重新实现Files.Readlines,它将文件内容返回为seq<string>.然后可以将其与Seq.concat连接:

let res = Directory.EnumerateFiles(@"D:\test_Data","*.csv",SearchOption.AllDirectories)
          |> Seq.map File.ReadLines 
          |> Seq.concat
Run Code Online (Sandbox Code Playgroud)