[英]Removing Subsets and Duplicates from a list?
我有一個對象列表。 每個對象都有一個名為Conflicts的屬性,它是一個HashSet int。
我想刪除所有屬於適當子集的集合,也要刪除所有重復項,如果哈希集包含相同的整數,則重復項是重復的:
private static List<ConflictGroup> RemoveSubsets(List<ConflictGroup> groups)
{
List<ConflictGroup> results = new List<ConflictGroup>();
foreach (var group in groups)
{
results.RemoveAll(r => r.Conflicts.SetEquals(group.Conflicts));
results.RemoveAll(r => r.Conflicts.IsProperSubsetOf(group.Conflicts));
results.Add(group);
}
return results;
}
這幾乎可行。
如果我有:
1
1,2
1,2,3
它僅保留1,2,3。
但是如果我有:
1,
1,2,3
1,2
它失敗並且不僅僅返回1,2,3 ...
我不確定該如何更改才能正常工作。
我假設它正在返回最后兩行?
該代碼將通過,刪除所有現有子集,然后添加當前子集。 如果“那個”不是其中任何一個的子集,則僅應添加當前一個。
怎么了:
只需添加測試,即可在添加之前新添加的組是否是某個現有組的子集:
if(results.Any(r => group.Conflicts.IsProperSubsetOf(r.Conflicts))){ continue; }
您甚至可以在那些RemoveAll之前對其進行測試,就像它是某個現有組的子集一樣,無論如何結果中都不會包含該子集的子集(相同代表相等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.