从大量字符串列表中计算相同的字符串数

Mon*_*RPG 1 c# string list c#-4.0 linq-group

我有超过600k的字符串.我想将相同的字符串分组并了解它们的数量.

这样的例子

i go to school
i like music
i like games
i like music
i like music
i like games
i like music
Run Code Online (Sandbox Code Playgroud)

所以结果会是

i go to school , 1
i like games  , 2
i like music , 4
Run Code Online (Sandbox Code Playgroud)

我怎样才能以最快的方式做到这一点?

Ray*_*Ray 5

这个GroupBy方法就是你想要的.您需要将您的字符串放在列表或实现的内容中IEnumerable<string>.在File.ReadLines由富豪建议将返回的IEnumerable<string>是逐行读取文件中的行.

var stringGroups = File.ReadLines("filename.txt").GroupBy(s => s);
foreach (var stringGroup in stringGroups)
    Console.WriteLine("{0} , {1}", stringGroup.Key, stringGroup.Count());
Run Code Online (Sandbox Code Playgroud)

如果你想要它们的顺序最少(如你的例子),只需添加一个 OrderBy

...
foreach (var stringGroup in stringGroups.OrderBy(g => g.Count()))
    ...
Run Code Online (Sandbox Code Playgroud)