我有以下的短代码,只计算一个文本的话:F# - 如何通过降序和升序来对列表进行排序?
[<EntryPoint>]
let main argv =
let text = File.ReadAllText("gettysburg.txt").ToLower()
Regex.Split(text, "\W+")
|> Seq.groupBy id
|> Seq.map (fun (k, grp) -> (k, grp |> Seq.length))
|> Seq.sortByDescending (fun (w, ln) -> (ln, w))
|> Seq.iter (fun (k, ln) -> printfn "%s\t%i" k ln)
排序函数首先通过分选发生的次数,然后按字母顺序的话,这两个下降。我需要按事件降序,然后按字母顺序升序。
用LINQ很容易用OrderByDescending和ThenBy。我如何在F#中获得相同的结果而不重复使用LINQ?
谢谢。
你可以使用LINQ的方法,就像你在C# – Carsten
的方式将:只是改变你的代码到'Seq.sortBy(fun(w,ln) - >(-ln,w))'应该可以很好地工作 – Carsten
作为快速回答:发生次数否定的Seq.sortBy,按字母顺序排列的单词:':> Seq.sortBy(fun(w,ln) - >(-ln,w))'。 –