Удалить повторяющиеся элементы из второго списка

#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