[英]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.