Каков наилучший способ сравнения 2 целочисленных списков / массив в C # - PullRequest
12 голосов
/ 24 апреля 2011

Я хочу сравнить 2 целых списка на равенство. Я с удовольствием рассортирую их заранее, если это облегчит задачу. Вот пример двух вещей, которые я хочу сравнить. Для ниже, я хочу, чтобы результат был истинным.

ПРИМЕЧАНИЕ: в списке никогда не будет дубликатов (без повторяющихся значений)

 List<int> list = new List<int>(){1, 4,6,7};
 int[] myArray = new int[]{1, 6,7 ,4};

Ответы [ 2 ]

24 голосов
/ 24 апреля 2011

Что для вас означает равенство при сравнении списков?Вас волнует, что списки точно такие же .... одинаковые элементы в том же порядке?Или просто содержат один и тот же набор значений, независимо от порядка.

Если вы действительно хотите убедиться, что списки содержат одинаковую последовательность значений в одном и том же порядке, вы можете использовать метод SequenceEqual() в LINQ:

bool areEqual = listA.SequenceEqual( listB );

Если списки не в том же порядке, вы можете сначала отсортировать их:

bool areEqual = listA.OrderBy(x=>x).SequenceEqual( listB.OrderBy(x=>x) );

Если списки могут содержать дубликаты, и дубликаты не имеют значения (с помощьюуважение к равенству), вы можете использовать сравнение множеств:

bool setEqual = new HashSet<int>( listA ).SetEquals( listB );

Если дубликаты не имеют значения, и вы заинтересованы в том, чтобы избежать затрат на сравнение (упорядочение, создание хэш-набора и т. д.), вы можетеСначала сравните размеры двух коллекций и сравните только, если они одинаковые.

7 голосов
/ 24 апреля 2011

Похоже, вы хотите сравнить их как наборы ... в этом случае:

HashSet<int> hashSet = new HashSet<int>(list);
if (hashSet.SetEquals(myArray))
{
    ...
}

Обратите внимание, что {1, 2, 2, 3} и {1, 3, 2, 3, 1} будут считаться равными. Это то, что вы хотите?

Почти наверняка есть что-то встроенное, что будет делать то, что вы хотите, но вам нужно быть точным в своем описании:)

РЕДАКТИРОВАТЬ: Как вы заявили, не будет повторных элементов, это должно быть хорошо. Хотя может быть целесообразно документировать это предположение.

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