2014-02-12 26 views
2

我有一个列表:如何从对象列表中删除双胞胎?

public class myObject(){ 
    public string Id {get;set} 
    public string Name {get;set} 
} 

var list = new List<MyObject>(); 

现在我想从列表中删除所有的DUP:

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真的删除所有二倍体但我想救一个。例如:

list{ 
    {1,aaaa} 
    {2,bbbb} 
    {1,aaaa} 
    {3,cccc} 
    {1,aaaa} 
    {2,bbbb}    
} 

,我想获得:

list{ 
    {1,aaaa} 
    {2,bbbb} 
    {3,cccc}    
} 

我怎样才能modifity我对这个代码?

+1

看一看不同的关键字 – Tomtom

+1

独特比较整个对象,但我需要比较一个字段。 –

回答

2

可以组列表中Id,并从每个组中选择的第一要素

var distinctList = list.GroupBy(x => x.Id).Select(y => y.First()); 
+0

是的,这段代码完全符合我的要求。谢谢。 –

3

根据您的评论,您只想比较ID,看看MoreLINQ并使用DistinctBy运算符并通过id选择不同的对象。这就是说,下面

var distinct = items.DistinctBy(i => i.Id); 
1

创建相等比较:

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());