Удалите объекты из одного списка в другом

Я пытаюсь выяснить, как пересечь универсальный список объектов, которые я хочу удалить из другого списка объектов.

Так же скажем, у меня есть это как гипотетический пример

List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();

Я хочу пересечь list1 с foreach и удалить каждый объект в List1, который также содержится в List2.

Я не совсем уверен, как пойти, о котором, поскольку foreach не является базирующимся индексом.

181
задан radbyx 11 January 2016 в 00:22
поделиться

5 ответов

Вы можете использовать кроме :

List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
List<car> result = list2.Except(list1).ToList();

Вам, вероятно, даже не нужны эти временные переменные:

List<car> result = GetSomeOtherList().Except(GetTheList()).ToList();

Обратите внимание, что За исключением того, что не изменяет ни один из списков - он создает новый список с результатом.

326
ответ дан 23 November 2019 в 06:08
поделиться

Вот и все ..

    List<string> list = new List<string>() { "1", "2", "3" };
    List<string> remove = new List<string>() { "2" };

    list.ForEach(s =>
        {
            if (remove.Contains(s))
            {
                list.Remove(s);
            }
        });
-4
ответ дан 23 November 2019 в 06:08
поделиться

Вам не нужен индекс, поскольку класс List позволяет удалять элементы по значению, а не по индексу, используя функцию Remove.

foreach(car item in list1) list2.Remove(item);
31
ответ дан 23 November 2019 в 06:08
поделиться

Я бы рекомендовал использовать методы расширения LINQ. Вы можете легко сделать это с помощью одной строки кода, например, так:

list2 = list2.Except(list1).ToList();

Это при условии, конечно, что объекты в списке1, которые вы удаляете из списка2, являются одним и тем же экземпляром.

22
ответ дан 23 November 2019 в 06:08
поделиться

Вы можете использовать LINQ, но я бы выбрал метод RemoveAll. Я думаю, что он лучше выражает ваше намерение.

var integers = new List<int> { 1, 2, 3, 4, 5 };

var remove = new List<int> { 1, 3, 5 };

integers.RemoveAll(i => remove.Contains(i));
13
ответ дан 23 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: