У меня есть две коллекции a
и b
. Я хотел бы вычислить набор элементов в a
или b
, но не в обоих (логический эксклюзив или). С помощью LINQ, я могу придумать с этим:LINQ и разность заданий
IEnumerable<T> Delta<T>(IEnumerable<T> a, IEnumerable<T> b)
{
return a.Except (b).Union (b.Except (a));
}
Интересно, если есть другие, более эффективные и более компактные способы получения разницы между этими двумя коллекциями.
Редактировать 1: Jon Skeet опубликовал первое решение, которое не сохраняет порядок позиций, опираясь на HashSet
. Интересно, есть ли другие подходы, которые сохраняли бы порядок a
и b
на выходе.
Что делать, если a или b содержат дубликаты? –
В моем случае 'a' и' b' не содержат дубликатов, поэтому для меня это не проблема. –