有一个单词列表。我想得到生成的字典,我可以在其中得到相同行的数量。那些。字典将包含{слово;количество совпадений}.
这段代码做到了,但是速度很慢。我做错了什么,它慢了这么多
var file = File.ReadAllLines(@"1.txt").ToList();
var result = file
.Select(str => new { Name = str, Count = file.Count(s => s == str) })
.Where(obj => obj.Count > 1)
.Distinct()
.ToDictionary(obj => obj.Name, obj => obj.Count);
嗯,是的,它会变慢,你有一个二次算法。您在每次迭代时重新阅读列表。
会帮助你
GroupBy:如果你需要扔掉唯一的字符串,你需要更长的时间:
使用字典。它提供按键快速搜索。在这种情况下,我们将检查字典中是否存在该词。如果它不存在,我们添加它,并将计数器设置为 1。如果它存在,我们通过键搜索并将计数器增加 1。字典的主要特征是它们具有通过以下方式获得的唯一键提取值的哈希码。形成哈希码表,提供快速查找。
正如@VladD 所建议的
执行代码的复杂度为 O(N^2),如果使用字典,则为 O(N)。