У меня есть две коллекции a
и b
. Я хотел бы вычислить набор элементов в a
или b
, но не в обоих (логический эксклюзив или). С 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
в выходе.