如何使用fsharp将FileInfo数组投影(转换)为字符串列表

时间:2014-03-24 11:49:11

标签: f#

我正在尝试的是这样的事情:

let getFiles path =  (directoryInfo path).GetFiles().ToList

但这给了我一个FileInfos列表而不是字符串列表。如何将其投影到字符串列表?

提前谢谢

2 个答案:

答案 0 :(得分:6)

Lee给出的答案是正确的,但这更容易:

open System.IO

let filenames = Directory.EnumerateFiles path |> Seq.toList

Directory.EnumerateFiles会返回string seq,但如果您对数组感到满意,则可以使用Directory.GetFiles代替。

答案 1 :(得分:4)

假设您想要与每个文件关联的路径:

let getFiles path = (directoryInfo path).GetFiles() |> Array.map (fun fi -> fi.FullName) |> List.ofSeq

请注意,这会创建一个F#列表,而不是System.Collections.Generic.List<string>。如果您想创建其中一个,可以使用ResizeArray

let getFiles path = (DirectoryInfo path).GetFiles() |> Array.map (fun fi -> fi.FullName) |> (fun s -> ResizeArray<_>(s))

编辑:正如评论指出的那样,由于GetFiles返回一个数组,您可以使用Array.map并避免在不需要的情况下转换为列表/调整大小数组。