Удалить элементы из одного списка в другом
160102 просмотра
8 ответа
Я пытаюсь выяснить, как просмотреть общий список элементов, которые я хочу удалить из другого списка элементов.
Так скажем, у меня есть это в качестве гипотетического примера
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
Я хочу пройти через list1 с помощью foreach и удалить каждый элемент в List1, который также содержится в List2.
Я не совсем уверен, как это сделать, поскольку foreach не основан на индексах.
Автор: PositiveGuy Источник Размещён: 12.11.2019 09:48Ответы (8)
326 плюса
Вы можете использовать кроме :
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
List<car> result = list2.Except(list1).ToList();
Возможно, вам даже не нужны эти временные переменные:
List<car> result = GetSomeOtherList().Except(GetTheList()).ToList();
Обратите внимание, что Except
не изменяет ни один из списков - он создает новый список с результатом.
31 плюса
Вам не нужен индекс, так как List<T>
класс позволяет вам удалять элементы по значению, а не индексировать с помощью Remove
функции.
foreach(car item in list1) list2.Remove(item);
Автор: Adam Robinson
Размещён: 30.04.2010 03:15
22 плюса
Я бы порекомендовал использовать методы расширения LINQ . Вы можете легко сделать это с одной строкой кода следующим образом:
list2 = list2.Except(list1).ToList();
Это, конечно, при условии, что объекты в списке list1, которые вы удаляете из списка list2, являются одним и тем же экземпляром.
Автор: Berkshire Размещён: 30.04.2010 03:1816 плюса
В моем случае у меня было два разных списка с общим идентификатором, вроде внешнего ключа. Второе решение, цитируемое "nzrytmn" :
var result = list1.Where(p => !list2.Any(x => x.ID == p.ID && x.property1 == p.property1)).ToList();
Был тот, который лучше всего подходит в моей ситуации. Мне нужно было загрузить DropDownList без записей, которые уже были зарегистрированы.
Спасибо !!!
Это мой код:
t1 = new T1();
t2 = new T2();
List<T1> list1 = t1.getList();
List<T2> list2 = t2.getList();
ddlT3.DataSource= list2.Where(s => !list1.Any(p => p.Id == s.ID)).ToList();
ddlT3.DataTextField = "AnyThing";
ddlT3.DataValueField = "IdAnyThing";
ddlT3.DataBind();
Автор: Gabriel Santos Reis
Размещён: 07.08.2015 03:27
13 плюса
Вы могли бы использовать 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));
Автор: João Angelo
Размещён: 30.04.2010 03:22
11 плюса
list1.RemoveAll(l => list2.Contains(l));
Автор: Alexandre Amado de Castro
Размещён: 08.05.2017 06:44
5 плюса
Решение 1: Вы можете сделать так:
List<car> result = GetSomeOtherList().Except(GetTheList()).ToList();
Но в некоторых случаях это решение может не сработать. если это не работа, вы можете использовать мое второе решение.
Решение 2:
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
мы притворяемся, что list1 - это ваш основной список, а list2 - ваш вторичный список, и вы хотите получить элементы списка list1 без элементов списка list2.
var result = list1.Where(p => !list2.Any(x => x.ID == p.ID && x.property1 == p.property1)).ToList();
Автор: nzrytmn
Размещён: 01.07.2015 06:08
-4 плюса
Вот и ты ..
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);
}
});
Автор: Ian P
Размещён: 30.04.2010 03:18
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- .net Действительно ли опечатанные классы действительно предлагают преимущества?
- .net Setting Objects to Null/Nothing after use in .NET
- .net Почему я не могу иметь абстрактные статические методы в C #?
- list Функция транспонирования / распаковки (обратная сторона zip)?
- list How would you make a comma-separated string from a list of strings?
- list Удалить дубликаты из списка <T> в C #
- list Console.WriteLine и общий список
- list Как проверить, если список пуст?
- list Являются ли кортежи более эффективными, чем списки в Python?