C# 是否从列表中删除子集和重复项?

C# 是否从列表中删除子集和重复项?,c#,C#,我有一个物品清单。每个对象都有一个名为Conflicts的属性,它是int的哈希集 我想删除所有正确子集的集合,如果哈希集合包含相同的整数,也要删除所有重复的集合,其中重复的是: private static List<ConflictGroup> RemoveSubsets(List<ConflictGroup> groups) { List<ConflictGroup> results = new List<ConflictGroup>

我有一个物品清单。每个对象都有一个名为Conflicts的属性,它是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,2,3

但如果我有:

1
1,2
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}

我想它会返回最后两行

代码将遍历、删除所有现有子集,然后添加当前子集。它应该只添加当前的一个,如果它不是任何已经在其中的子集

发生了什么:

  • 进程{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; }

您甚至可以在移除这些调用之前对其进行测试,就好像它是某个现有组的子集一样,结果中也不会有该子集的子集(同样表示相等)。

如果新添加的组是某个现有组的子集,则只需添加测试即可,然后再添加:

if(results.Any(r => group.Conflicts.IsProperSubsetOf(r.Conflicts))){ continue; }
您甚至可以在这些RemoveAll之前对其进行测试,就好像它是某个现有组的子集一样,结果中也不会有该子集的子集(同样表示相等)