Каков наилучший способ сравнить 2 целочисленных списка / массива в C#
Я хочу сравнить 2 целочисленных списка для равенства. Я рад отсортировать их заранее, если это облегчает задачу. Вот пример двух вещей, которые я хочу сравнить. Ниже я хочу результат, чтобы быть правдой.
примечание: в списке никогда не будет дубликатов (без повторяющихся значений)
List<int> list = new List<int>(){1, 4,6,7};
int[] myArray = new int[]{1, 6,7 ,4};
2 ответов
что означает равенство для вас при сравнении списков? Вам важно, что списки точно такие же .... те же предметы в том же порядке? Или просто содержит тот же набор значений, независимо от того.
если вы действительно хотите проверить, что списки содержат ту же последовательность значений в том же порядке, вы можете использовать SequenceEqual()
метод в LINQ:
bool areEqual = listA.SequenceEqual( listB );
если перечислены не в том же порядке, вы можете сортировать их:
bool areEqual = listA.OrderBy(x=>x).SequenceEqual( listB.OrderBy(x=>x) );
если списки могут содержать дубликаты, и дубликаты не имеют значения (в отношении равенства), вы можете использовать set comparison:
bool setEqual = new HashSet<int>( listA ).SetEquals( listB );
если дубликаты не имеют значения, и вы заинтересованы в том, чтобы избежать расходов на сравнение (заказ, создание хэш-набора и т. д.), Вы можете сначала просто сравнить размеры двух коллекций и сравнить только если они одинаковы.
похоже, вы хотите сравнить их как наборы... в таком случае:
HashSet<int> hashSet = new HashSet<int>(list);
if (hashSet.SetEquals(myArray))
{
...
}
обратите внимание, что это будет считать { 1, 2, 2, 3 } и { 1, 3, 2, 3, 1 } как равных. Это то, что вы хотите?
почти наверняка что-то встроено, что будет делать то, что вы хотите, но вам нужно быть точным в своем описании :)
EDIT: как вы заявили, повторяющихся элементов не будет, это должно быть хорошо. Возможно, было бы разумно задокументировать предположение хотя.