简体   繁体   English

如何从对象列表中删除二元组?

[英]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? 我该如何修改我的代码?

As per your comment you want to compare by ID only, have a look at MoreLINQ and use the DistinctBy operator and select distinct objects by id. 根据您的评论,您只想按ID进行比较,请查看MoreLINQ并使用DistinctBy运算符并按ID选择不同的对象。 That is something like below 就像下面这样

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

您可以按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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM