У меня есть две коллекции 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 в выходе.