Страницы

Поиск по вопросам

четверг, 25 апреля 2019 г.

Сравнение двух списков состоящих из массивов

Есть два списка List list1 и list2. Элементы в них могут совпадать. Мне нужно получить новый список list3 в который войдут элементы из list2, которых не было в list1
Я пытаюсь реализовать это так, но условие не работает и на выходе список пустой.
List list3 = list2.Where(x => !list1.Contains(x)).ToList();
Реализовал это так, но не горел желанием форы использовать, хотелось бы разобраться почему не работал первый вариант.
for (byte i = 0; i < list2.Count; ++i) for (byte j = 0; j < list1.Count; ++j) { if (list2[i].SequenceEqual(list1[j])) list3.Add(list2[i]); }


Ответ

Первый вариант не работал потому, что Contains сравнивает через Equals, а равенство по Equals для массивов есть равенство ссылок. А вам ведь нужно SequenceEqual вместо этого.
Поэтому можно написать свой вариант Contains
x => !list1.Any(y => y.SequenceEqual(x))

Комментариев нет:

Отправить комментарий