代码之家  ›  专栏  ›  技术社区  ›  mpen

如何移除所有适当的子集?

  •  0
  • mpen  · 技术社区  · 15 年前

    给定一个集合列表。。。

    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 回复  |  直到 10 年前
        1
  •  3
  •   AeroX arpit desai    10 年前
    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