如何删除所有正确的子集?

时间:2010-10-09 08:07:24

标签: c# hashset subset

给出一组集......

var sets = new List<HashSet<int>>(numTags);

如何删除作为另一个的正确子集的所有集合?

这是最好的方法吗?

for (int i = 0; i < sets.Count; ++i)
{
    for (int j = 0; j < sets.Count; ++j)
    {
        if (i != j && sets[i].IsProperSubsetOf(sets[j]))
        {
            sets.RemoveAt(i--);
        }
    }
}

我正在递减i,因为我认为一切都被删除之后一切都被轻推了所以我必须再次检查那个插槽。

1 个答案:

答案 0 :(得分:3)

var toRemove = sets.Where(s => sets.Any(superset => s.IsProperSubsetOf(superset))).ToList();

foreach (var s in toRemove)
    sets.Remove(s);

您不需要s != superset检查,因为没有设置是其自身的正确子集。 http://en.wikipedia.org/wiki/Proper_subset#proper_subset