Любой встроенный метод, чтобы узнать, если два списка отличаются? - PullRequest
3 голосов
/ 09 февраля 2011

Мне нужно сравнить два списка и только знать, содержат ли они одинаковые значения или нет.Я не собираюсь ничего делать с различиями.

Каков наилучший способ добиться этого в C #?

Я знаю, что могу зациклить списки, но хочу знать, есть ли в- встроенный метод LINQ / extenstion для достижения этого, который обеспечивает лучшую производительность.Пробовал Except / Intersect, но не знаю, являются ли они наиболее подходящими для этого.

Обновление: списки не будут иметь дубликатов внутри.

1 Ответ

6 голосов
/ 09 февраля 2011

Как вы хотите обрабатывать дубликаты? Например, вы бы посчитали {2, 1, 1} таким же, как {1, 2}? (Я предполагаю, что порядок не имеет значения ... в противном случае просто используйте SequenceEqual.)

При условии, что вы эффективно заботитесь только о "наборах", есть два варианта:

Быстрый и грязный способ:

if (!list1.Except(list2).Any() && !list2.Except(list1).Any())

Немного чище:

var set = new HashSet<int>(list1); // Adjust case accordingly
if (set.SetEquals(list2))
{
    // Lists were equal
}

Следует учесть одну вещь: если вас интересует только обработка их как наборов, вы можете использовать представление набора для начала вместо списка ...

...