相关疑难解决方法(0)

从C#中的List <T>中删除重复项

任何人都有一个快速的方法来重复C#中的通用列表?

c# generics list duplicates

455
推荐指数
17
解决办法
55万
查看次数

从List中删除重复项的最有效方法

假设我有一个包含重复值的List,我想删除重复项.

List<int> myList = new List<int>(Enumerable.Range(0, 10000));

// adding a few duplicates here
myList.Add(1); 
myList.Add(2);
myList.Add(3);
Run Code Online (Sandbox Code Playgroud)

我找到了3种方法来解决这个问题:

List<int> result1 = new HashSet<int>(myList).ToList(); //3700 ticks
List<int> result2 = myList.Distinct().ToList(); //4700 ticks
List<int> result3 = myList.GroupBy(x => x).Select(grp => grp.First()).ToList(); //18800 ticks
//referring to pinturic's comment:
List<int> result4 = new SortedSet<int>(myList).ToList(); //18000 ticks
Run Code Online (Sandbox Code Playgroud)

在SO的大多数答案中,Distinct方法显示为"正确的",但HashSet总是更快!

我的问题:当我使用HashSet方法时,有什么我必须要注意的,还有另一种更有效的方法吗?

c# list distinct

23
推荐指数
1
解决办法
9325
查看次数

创建不同的数据结构有什么好处:HashSet或Linq的Distinct()?

我想知道我是否可以就哪种方法创建一组不同的元素更好的方法达成共识:a C# HashSet或using IEnumerable's .Distinct(),这是Linq函数?

假设我正在使用DataReader循环查询数据库中的查询结果,我的选项是将我构造的对象添加到a List<SomeObject>或者HashSet<SomeObject>使用该List选项,我最终必须执行以下操作:

myList = myList.Distinct().ToList<SomeObject>();

有了这个HashSet,我的理解是,假设你已经覆盖了SomeObject中的GetHashCode()and和Equals()方法,那么添加元素就可以自己处理非重复.我主要关注选项的风险和性能方面.

谢谢.

linq performance distinct hashset

21
推荐指数
3
解决办法
8879
查看次数

标签 统计

c# ×2

distinct ×2

list ×2

duplicates ×1

generics ×1

hashset ×1

linq ×1

performance ×1