List去重的最高效方法假设我有一个包含重复值的List,我想去重。列表myList=newList(Enumerable.Range(0,10000));//在这里添加一些重复项myList.Add(1);myList.Add(2);myList.Add(3);我找到了3种方法来解决这个问题:Listresult1=newHashSet(myList).ToList();//3700ticksListresult2=myList.Distinct().ToList();//4700ticksListresult3=myList.GroupBy(x=>x).Select(grp=>grp.First()).ToList();//18800ticks//参考pinturic的评论:Listresult4=newSortedSet(myList).ToList();//18000ticks在SO上很棒Distinct方法在大多数答案中似乎是“正确的”,但HashSet总是更快!我的问题:使用HashSet方法有什么需要注意的吗,有没有其他更高效的方法?这两种方法有很大的区别:ListResult1=newHashSet(myList).ToList();//3700ticksListResult2=myList.Distinct().ToList();//4700ticks第一个可以(可能)更改返回的List元素的顺序:Result1元素与myList的元素顺序不同。第二个保留原始顺序。可能没有比第一个更快的方法了。对于第二个,可能没有“更正确”(对于基于排序的“正确”的某种定义)。(第三个和第二个类似,只是慢一点)出于好奇,Distinct()是://参考源http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,712public静态IEnumerableDistinct(此IEnumerable源){如果(源==null)抛出Error.ArgumentNull(“源”);返回DistinctIterator(源,空);}//参考来源http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,722staticIEnumerableDistinctIterator(IEnumerablesource,IEqualityComparercomparer){Setset=newSet(comparer);foreach(源中的TSource元素)if(set.Add(element))yield返回元素;所以最后Distinct()只是使用HashSet的内部实现(称为Set)来检查项目的唯一性。为了完整起见,我将添加指向问题的链接C#Distinct()方法是否保持序列的原始顺序不变?以上就是C#学习教程:最有效的列表去重方法分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
