C# 是否从列表中删除子集和重复项?
我有一个物品清单。每个对象都有一个名为Conflicts的属性,它是int的哈希集 我想删除所有正确子集的集合,如果哈希集合包含相同的整数,也要删除所有重复的集合,其中重复的是:C# 是否从列表中删除子集和重复项?,c#,C#,我有一个物品清单。每个对象都有一个名为Conflicts的属性,它是int的哈希集 我想删除所有正确子集的集合,如果哈希集合包含相同的整数,也要删除所有重复的集合,其中重复的是: private static List<ConflictGroup> RemoveSubsets(List<ConflictGroup> groups) { List<ConflictGroup> results = new List<ConflictGroup>
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之前对其进行测试,就好像它是某个现有组的子集一样,结果中也不会有该子集的子集(同样表示相等)