Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Операция симетричная разность для двух списков

#c_sharp #list


Есть операция дизъюнкции, т.е. объединения. Я хочу из двух списков взять только уникальные
значения, но несовсем понятно как это сделать. Посмотрел Except, Intersect - это не то. 

Вот для наглядности

List lst1 = new List(){"1","2","3"};
List lst2 = new List(){"1","2","4"};

//var lstRez = {"3","4"}; Вот что должно получиться в итоге, т.е. символ 4 здесь
уникален в обоих списках


Вот как выглядит операция объединения графически


    


Ответы

Ответ 1



Симметрическая разность множеств - это объединение разностей двух множеств, соответственно можно сделать так: List lst1 = new List(){"1","2","3"}; List lst2 = new List(){"1","2","4"}; List result = lst1.Except(lst2).Union(lst2.Except(lst1)).ToList(); А также у интерфейса ISet есть метод: void SymmetricExceptWith(IEnumerable other)

Ответ 2



Ещё один способ - из объединения вычесть пересечение: List lst1 = new List() { "1", "2", "3" }; List lst2 = new List() { "1", "2", "4" }; var lstRes = lst1.Union(lst2).Except(lst1.Intersect(lst2));

Комментариев нет:

Отправить комментарий