#c# #linq
#c# #linq
Вопрос:
У меня есть два списка с несколькими повторяющимися элементами. Я хочу удалить эти повторяющиеся элементы из list2
.
List<String> list1 = new List<String>() { John, Donald, White, Trump, Bill };
List<String> list2 = new List<String>() { Michael, Donald, Trump, Jerry, Obi };
Следовательно, результат будет:
list2 = Michael, Jerry, Obi
Любая помощь приветствуется.
Примечание: я НЕ хочу объединять элементы list1 и list2.
Комментарии:
1. Используйте перечисляемый. Метод Except() .
2.
list2.RemoveAll(list1.Contains);
3. Пожалуйста, постарайтесь приложить некоторые усилия, задавая вопрос. Например, ваши строки не заключены в кавычки, поэтому они будут оцениваться как неопределенные переменные, вызывая ошибку компиляции. Пожалуйста, также покажите все проведенные вами исследования и любые попытки, которые вы предприняли на основе этих исследований.
Ответ №1:
На месте:
list2.RemoveAll(list1.Contains);
Как копия:
var list3 = list2.Except(list1).ToList();
Комментарии:
1. Какой из них должен быть быстрее?
2. @NewYorker протестируйте их, и вы узнаете. найдите его на github
3. При выборе важно знать, что
list2.RemoveAll()
будет измененоlist2
, приlist2.Except().ToList()
этом оставитьlist2
нетронутым, но также создать новый список.4. @NewYorker Сосредоточьтесь на семантике, а не на скорости; вам нужен новый экземпляр или нет?
5. @Sinatr из сообщения:
list2 = Michael, Jerry, Obi
похоже, что удаление элементов из list2 на самом деле является тем, чего хочет OP