我有一个大的字符串列表(大约5k-20k条目),我需要订购,也可以删除重复项。
我现在已经用2种方式完成了这项工作,一次使用hashset,一次只使用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();
就像我说我做的测试两种方法的消耗大致相同,但我仍然想知道一种方法是否比另一种更好,如果是这样的话(代码是高性能部分,我需要得到)每毫秒我就可以了。)
答案 0 :(得分:2)
如果你真的关心每一纳秒,那么
myList = myList.Distinct().OrderBy(q => q).ToList();
可能略快于:
myList = myList.OrderBy(q => q).Distinct().ToList();
如果有大量重复项。
LINQ方法更具可读性,与其他人所说的显式创建HashSet<T>
具有相似的性能。事实上,如果原始List已经排序,它可能会稍微快一些,因为LINQ方法将在排序之前保留初始顺序,而显式创建HashSet<T>
将以未定义的顺序枚举。
答案 1 :(得分:0)
他们几乎一样。 Distinct
也使用Set<T>
来消除重复项。我的建议是首先使用Distinct
然后对您的项目进行排序。另外,在您的第二个代码中,ToList<String>
来电是多余的,您可以OrderBy
使用HashSet
,然后拨打ToList
。