如何在F#中总结集合的长度?

Sin*_*ani 1 .net f#

我正在尝试打印给定目录中所有文件的总行数.但是,我收到一个错误Type mismatch. Expecting IEnumerable<string> -> 'a but given a 'b list -> 'c list.我不确定为什么会这样.这是我的代码:

let printLengths path =
    let files = Directory.EnumerateFiles(path)
    let fileLengths = files |> List.map (fun dir -> Seq.length(File.ReadLines(dir)))
    printfn "%i" (List.sum fileLengths)
Run Code Online (Sandbox Code Playgroud)

Van*_*oiy 6

System.IO.Directory.EnumerateFiles返回一个序列IEnumerable<'T>,而不是一个列表.使用Seq.mapSeq.sum映射或求和序列.

或者,对于更短的解决方案,请使用Seq.sumBy:

let printTotalNumberOfLines path =
    Directory.EnumerateFiles path
    |> Seq.sumBy (File.ReadAllLines >> Seq.length)
    |> printfn "%i"
Run Code Online (Sandbox Code Playgroud)