我有一個C#中的對象列表。所有對象都包含一個屬性ID。 有幾個對象具有相同的ID屬性。從列表中刪除重複屬性的對象
如何修剪列表(或創建一個新的列表)每個ID屬性只有一個對象?
[任何額外的副本都跌出名單]
我有一個C#中的對象列表。所有對象都包含一個屬性ID。 有幾個對象具有相同的ID屬性。從列表中刪除重複屬性的對象
如何修剪列表(或創建一個新的列表)每個ID屬性只有一個對象?
[任何額外的副本都跌出名單]
如果你想避免使用第三方庫,你可以這樣做:
fooArray.GroupBy(x => x.Id).Select(x => x.First());
將由組陣列Id屬性,然後選擇分組中的第一個條目。
MoreLINQ DistinctBy()
會做這項工作,它允許使用對象proeprty的獨特性。不幸地建在LINQ Distinct()
不靈活enoght。
var uniqueItems = allItems.DistinctBy(i => i.Id);
DistinctBy()
返回給定源,其中 「獨特性」通過投影和默認eqaulity 比較器對於投影類型確定的所有不同的元素。
PS:貸Jon Skeet爲
var list = GetListFromSomeWhere();
var list2 = GetListFromSomeWhere();
list.AddRange(list2);
....
...
var distinctedList = list.DistinctBy(x => x.ID).ToList();
More LINQ
在google code
或者,如果你不想使用外部的dll因爲某些原因,你可以使用這個Distinct
過載能力:
public static IEnumerable<TSource> Distinct<TSource>(
this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
用法:
public class FooComparer : IEqualityComparer<Foo>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(Foo x, Foo y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
return x.ID == y.ID
}
}
list.Distinct(new FooComparer());
爲什麼downvote? – gdoron 2012-04-03 12:29:22
不知道是否有人還在尋找任何附加如何做到這一點。但是我使用這段代碼根據匹配的ID號從User對象列表中刪除重複項。
private ArrayList RemoveSearchDuplicates(ArrayList SearchResults)
{
ArrayList TempList = new ArrayList();
foreach (User u1 in SearchResults)
{
bool duplicatefound = false;
foreach (User u2 in TempList)
if (u1.ID == u2.ID)
duplicatefound = true;
if (!duplicatefound)
TempList.Add(u1);
}
return TempList;
}
調用:SearchResults = RemoveSearchDuplicates(SearchResults);
這工作完全這裏是我的實現。 列表 uniqueRows = inputRows.GroupBy(X => x.Id)。選擇(X => x.First())ToList (); –
Baxter
2012-04-03 13:24:53
很高興幫助!一個注意:你的'ToList()'上的''是多餘的。你應該能夠做'.ToList()' –
2012-04-03 13:43:40
你說得對,它只用ToList()而不是ToList() –
Baxter
2012-04-03 16:20:16