2010-05-14 2 views

ответ

2

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

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

Так пример будет:

List<int> a = new List<int>() { 1, 2, 3, 4, 5 }; 
List<int> b = new List<int>() { 1, 2, 3, 4 }; 
List<int> c = a.Except(b).ToList(); 

Где Список C будет иметь значение только 5 в нем.

+0

спасибо, что я имею в виду – kartal

0
var distinctItems = items.Distinct(); 

Не совсем то, что вы просили, но это намного проще сделать новый список, копируя элементы, которые вы хотите сохранить, чем пытаться изменить первоначальный список.

Если вы хотите контролировать то, что составляет «равенство» для ваших элементов списка, тогда вызовите перегрузку, которая принимает экземпляр IEqualityComparer<T>.

См. MSDN.

1

Не так элегантно, как с использованием, кроме (который я никогда не знал, существовал) ... но это работает:

List<string> listA = new List<string>(); 
    List<string> listB = new List<string>(); 

    listA.Add("A"); 
    listA.Add("B"); 
    listA.Add("C"); 
    listA.Add("D"); 

    listB.Add("B"); 
    listB.Add("D"); 

    for (int i = listA.Count - 1; i >= 0; --i) 
    { 
     int matchingIndex = listB.LastIndexOf(listA[i]); 

     if (matchingIndex != -1) 
      listB.RemoveAt(matchingIndex); 
    } 
+0

ОК, я протестировал метод Except, и это определенно более элегантно: Список listC = listA.Except (listB) .ToList(); Это создаст третий список, содержащий только элементы в списке A, которые не найдены в спискеB. – beaudetious

+0

Пожелайте, чтобы они разрешили форматирование в комментариях! :) – beaudetious

Смежные вопросы