Страницы

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

суббота, 15 февраля 2020 г.

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

#c_sharp #массивы #список #сравнение


Есть два списка 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]);
        }

    


Ответы

Ответ 1



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

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

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