IEnumerable<string> inputList; // input words.
var mostFrequentlyUsed = inputList.GroupBy(word => word)
.Select(wordGroup => new { Word = wordGroup.Key, Frequency = wordGroup.Count() })
.OrderByDescending(word => word.Frequency);
Объяснение: Я действительно не знаю, требует ли это дальнейшего объяснения, но я попробую. inputList
- это массив или любая другая коллекция, содержащая исходные слова. Функция GroupBy
сгруппирует входную коллекцию по некоторому похожему свойству (в моем коде это сам объект, как отмечено лямбдой word => word
). Вывод (который представляет собой набор групп по указанному ключу, слову) будет преобразован в объект со свойствами Word
и Frequency
и отсортирован по свойству Frequency
в порядке убывания. Вы можете использовать .Take(10000)
, чтобы взять первые 10000. Все это можно легко распараллелить с помощью .AsParallel()
, предоставленного PLINQ. Синтаксис оператора запроса может выглядеть яснее:
var mostFrequentlyUsed =
(from word in inputList
group word by word into wordGroup
select new { Word = wordGroup.Key, Frequency = wordGroup.Count() })
.OrderByDescending(word => word.Frequency).Take(10000);