簡體   English   中英

從列表中刪除子集和重復項?

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

我不確定該如何更改才能正常工作。

我假設它正在返回最后兩行?

該代碼將通過,刪除所有現有子集,然后添加當前子集。 如果“那個”不是其中任何一個的子集,則僅應添加當前一個。

怎么了:

  • 流程{1}-未刪除,添加{1}
  • 流程{1,2,3}-刪除1({1,2,3}的適當子集),添加{1,2,3}
  • 流程{1,2}-未刪除({1,2,3}不是{1,2}的子集),添加{1,2}

只需添加測試,即可在添加之前新添加的組是否是某個現有組的子集:

if(results.Any(r => group.Conflicts.IsProperSubsetOf(r.Conflicts))){ continue; }

您甚至可以在那些RemoveAll之前對其進行測試,就像它是某個現有組的子集一樣,無論如何結果中都不會包含該子集的子集(相同代表相等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM