Update: In 版本3 https://github.com/morelinq/MoreLINQ/releases/tag/v3.0.0, MaxBy https://morelinq.github.io/3.0/ref/api/html/Overload_MoreLinq_MoreEnumerable_MaxBy.htm(包括MinBy https://morelinq.github.io/3.0/ref/api/html/Overload_MoreLinq_MoreEnumerable_MinBy.htm)的MoreLINQ更改为返回序列 https://github.com/morelinq/MoreLINQ/issues/328而不是单个项目。
使用 MoreLINQPartialSort https://morelinq.github.io/2.0/ref/api/html/Overload_MoreLinq_MoreEnumerable_PartialSort.htm or PartialSortBy https://morelinq.github.io/2.0/ref/api/html/Overload_MoreLinq_MoreEnumerable_PartialSortBy.htm。下面的例子使用PartialSortBy
查找并打印给定文本中最长的 5 个单词:
var text = @"
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Etiam gravida nec mauris vitae sollicitudin. Suspendisse
malesuada urna eu mi suscipit fringilla. Donec ut ipsum
aliquet, tincidunt mi sed, efficitur magna. Nulla sit
amet congue diam, at posuere lectus. Praesent sit amet
libero vehicula dui commodo gravida eget a nisi. Sed
imperdiet arcu eget erat feugiat gravida id non est.
Nam malesuada nibh sit amet nisl sollicitudin vestibulum.";
var words = Regex.Matches(text, @"\w+");
var top =
from g in words.Cast<Match>()
.Select(m => m.Value)
.GroupBy(s => s.Length)
.PartialSortBy(5, m => m.Key, OrderByDirection.Descending)
select g.Key + ": " + g.Distinct().ToDelimitedString(", ");
foreach (var e in top)
Console.WriteLine(e);
它将打印:
14: malesuadafsfjs
12: sollicitudin
11: consectetur, Suspendisse
10: adipiscing, vestibulum
9: malesuada, fringilla, tincidunt, efficitur, imperdiet