[英]How to remove duples from list of objects?
I have a list: 我有一个清单:
public class myObject(){
public string Id {get;set}
public string Name {get;set}
}
var list = new List<MyObject>();
Now i want remove all dups from list: 现在我要从列表中删除所有公仔:
var dupsId=
from p in list
group p by p.Id into g
where g.Count() > 1
select g.Key;
var dups= new List<MyObject>();
foreach (var id in dupsId)
{
foreach (var listItem in list.FindAll(p => p.Id== id))
{
dups.Add(listItem);
}
}
dups.ForEach(p=>list.Remove(p));
Its'r really remove all duples but i want save one. 它确实删除了所有的二元组,但我想保存一个。 For example:
例如:
list{
{1,aaaa}
{2,bbbb}
{1,aaaa}
{3,cccc}
{1,aaaa}
{2,bbbb}
}
And i want to get: 我想得到:
list{
{1,aaaa}
{2,bbbb}
{3,cccc}
}
How can i modifity my code for this? 我该如何修改我的代码?
您可以按Id
对列表进行分组,然后从每个组中选择第一个元素
var distinctList = list.GroupBy(x => x.Id).Select(y => y.First());
Create equality comparer: 创建相等比较器:
public sealed class myObjectEqualityComparer : IEqualityComparer<myObject>
{
public bool Equals(myObject x, myObject y)
{
// null checking here
return x.Id == y.Id;
}
public int GetHashCode(myObject obj)
{
return obj.Id.GetHashCode();
}
}
and use it in Distinct
method: 并以
Distinct
方法使用它:
var uniqueItems = list
.Distinct(new myObjectEqualityComparer());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.