2016-01-19 42 views
3

我被困在试图找出使用F#获取特定根目录中最新的n个文件夹的方法。以下代码是该旅程的结果,我想在此发布并分享代码示例以帮助其他工程师尝试解决类似问题。如何使用F#获取最新的x目录文件夹条目

open System 
open System.IO 

// only get the N latest FOLDERS in a directory  
let getLatestNFolders (rootDirectory:string) (howmany:int) = 
    let latestFolders = 
     Directory.GetDirectories(rootDirectory) 
     |> Seq.cache 
     |> Seq.map(fun filePath -> (filePath, Directory.GetCreationTime(filePath))) 
     |> Seq.sortBy(fun (path, time) -> -time.Ticks) // descending order 
     |> Seq.take(howmany) 
     |> Seq.map(fun (path, time) -> path) 
     |> Set.ofSeq 
    latestFolders 

let results = getLatestNFolders "c:\\temp" 3 

results |> Seq.iter(fun path -> printfn "%s\n" path) 
+0

尼斯,是非常有用的。 –

+0

@ louie-bacaj - 谢谢。 – Dotcomputercraft

+2

更好的格式是建议一个真正的问题,然后把代码放在答案中 –

回答

3

这里有一些改进,主要集中在去除一些多余的内容:

// only get the N latest FOLDERS in a directory  
let getLatestNFolders (rootDirectory:string) howmany = 
    Directory.GetDirectories(rootDirectory) 
    |> Seq.sortBy(fun path -> -Directory.GetCreationTime(path).Ticks) // descending order 
    |> Seq.take howmany 
+0

谢谢约翰。我喜欢这些改进。 – Dotcomputercraft

+0

请注意,如果您使用f#4.0,则可以使用Seq.sortByDescending。 – Lars

相关问题