[英]How to remove duples from list of objects?
我有一个清单:
public class myObject(){
public string Id {get;set}
public string Name {get;set}
}
var list = new List<MyObject>();
现在我要从列表中删除所有公仔:
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));
它确实删除了所有的二元组,但我想保存一个。 例如:
list{
{1,aaaa}
{2,bbbb}
{1,aaaa}
{3,cccc}
{1,aaaa}
{2,bbbb}
}
我想得到:
list{
{1,aaaa}
{2,bbbb}
{3,cccc}
}
我该如何修改我的代码?
根据您的评论,您只想按ID
进行比较,请查看MoreLINQ并使用DistinctBy运算符并按ID选择不同的对象。 就像下面这样
var distinct = items.DistinctBy( i => i.Id );
您可以按Id
对列表进行分组,然后从每个组中选择第一个元素
var distinctList = list.GroupBy(x => x.Id).Select(y => y.First());
创建相等比较器:
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();
}
}
并以Distinct
方法使用它:
var uniqueItems = list
.Distinct(new myObjectEqualityComparer());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.