我有一个对象列表。每个对象都有一个名为Conflicts的属性,它是一个int的HashSet。
我想删除任何属于正确子集的集合,如果散列集包含相同的整数,还要删除任何重复的集合:
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 ......
我不确定我应该做些什么来改变它。
答案 0 :(得分:1)
我认为它会返回最后两行?
代码通过,删除所有EXISTING子集,然后添加当前的子集。如果THAT ONE不是已经存在的任何一个子集,它应该只添加当前的那个。
会发生什么:
答案 1 :(得分:1)
如果新添加组是添加之前存在的某些子集,只需添加测试:
if(results.Any(r => group.Conflicts.IsProperSubsetOf(r.Conflicts))){ continue; }
你甚至可以在那些RemoveAll之前测试它,好像它是某个现有组的子集,无论如何结果中都没有这个子集的子集(同样代表相等)。