Подтвердить что ты не робот

Каков самый быстрый способ удалить один массив элементов из другого?

У меня есть два массива строк:

 string[] all = new string[]{"a", "b", "c", "d"}

 string[] taken = new string[]{"a", "b"}

Я хочу сгенерировать новый массив строк с c и d, который является all - taken.

Любой быстрый способ в .net 3.5 сделать это без ручного цикла и создания новых списков?

4b9b3361

Ответ 1

var remains = all.Except(taken);

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

В этом случае может быть большое преимущество в производительности, чтобы сразу не использовать массив. У вас есть "a" через "d" в вашей "все" коллекции, а "a" и "b" в вашей "взятой" коллекции. На данный момент переменная "остается" еще не содержит данных. Вместо этого это объект, который знает, как рассказать вам, какие данные будут там, когда вы его попросите. Если вам никогда не нужна эта переменная, вы никогда не делали никакой работы, чтобы рассчитать, какие предметы принадлежат ей.

Ответ 2

Для этого используется LINQ Except, например all.Except(taken).

Ответ 3

string[] result = all.Except<string>(taken).ToArray<string>();