#c_sharp #массивы #список #сравнение
Есть два списка Listlist1 и 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]); }
Ответы
Ответ 1
Первый вариант не работал потому, что Contains сравнивает через Equals, а равенство по Equals для массивов есть равенство ссылок. А вам ведь нужно SequenceEqual вместо этого. Поэтому можно написать свой вариант Contains: x => !list1.Any(y => y.SequenceEqual(x))
Комментариев нет:
Отправить комментарий