0

给定一个集合列表...

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,因为我假设所有东西在被移除后都会被轻推,所以我必须再次检查那个插槽。

4

1 回答 1

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

于 2010-10-09T08:13:41.177 回答