Как удалить все правильные подмножества? - PullRequest
0 голосов
/ 09 октября 2010

Дан список наборов ...

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 Ответ

3 голосов
/ 09 октября 2010
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...