我有一个很大的字符串列表(大约 5k-20k 个条目),我需要对其进行排序并从中删除重复项。
我现在用 2 种方法完成了这项工作,一次使用哈希集,一次仅使用 linq。使用该数量的条目进行的测试并没有显示出很大的差异,但我想知道哪种方式以及哪种方法更适合。
对于方法(myList的数据类型为List):
Linq:我正在使用 1 条 linq 语句对列表进行排序并从中获取不同的值。
myList = myList.OrderBy(q => q).Distinct().ToList();
Hashset:我正在使用 hashset 删除所有重复项,然后对列表进行排序
myList = new HashSet<String>(myList).ToList<String>();
myList = myList.OrderBy(q => q).ToList();
就像我说的那样,我所做的测试对两种方法消耗的时间大致相同,但我仍然想知道一种方法是否比另一种方法更好,如果是这样,为什么(代码是针对高性能部分的,我需要得到每一毫秒我都可以摆脱它)。
最佳答案
如果你真的关心每一纳秒,那么
myList = myList.Distinct().OrderBy(q => q).ToList();
可能略快于:
myList = myList.OrderBy(q => q).Distinct().ToList();
如果有大量重复。
LINQ 方法更具可读性,并且与显式创建 HashSet<T>
具有相似的性能正如其他人所说。事实上,如果原始 List 已经排序,它可能会稍微快一些,因为 LINQ 方法将在排序前保留初始顺序,同时显式创建 HashSet<T>
。将以未定义的顺序枚举。
关于c# - 从字符串列表中获取不同且有序的成员 - linq 或 hashset for unique 哪个更快/更适合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421213/