Удалить элемент из списка, если его нет в другом списке, используя linq - PullRequest
0 голосов
/ 19 марта 2012

У меня есть два разных типа списков

class A

{

int number;

string name;

}

class B

{

int number;

}

List<A> a1;

List<B> b1;

И теперь оба списка были заполнены, и теперь я хочу удалить элементы (номер) в списке a1, если этот элемент (номер) не существует в списке b1.пробовал следующий подход

a1.removeall(a=>b1.Exists(b1.number!=a1.number);

, но результат не такой, как ожидалось. Пожалуйста, помогите мне ...

1 Ответ

2 голосов
/ 19 марта 2012

Я думаю, вы хотите это:

a1.RemoveAll(a=> !b1.Any(b=> b.number == a.number));

Знайте, что это O (n ^ 2).Более производительный подход будет использовать HashSet<int> (это может не иметь значения для небольших списков, но помните об этом для больших списков):

 HashSet<int> bNums = new HashSet<int>(b1.Select(b => b.number));
 a1.RemoveAll(a => !bNums.Contains(a.number));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...