/// <summary> /// Возвращает геометрическую разность (элементы, не входящие в пересечение) текущего множества с указанным. /// Типы множеств - SortedLinkedList, т.е. используется реализация списков. /// </summary> /// <param name="B">Второе множество</param> /// <returns>Новое множество элементов. (может быть пустым)</returns> public SortedLinkedList <T> SymmetricDifference(SortedLinkedList <T> B) { SortedLinkedList <T> ANB = Difference(B); //A\B SortedLinkedList <T> BNA = B.Difference(this); //B\A return(ANB.Union(BNA)); }
/// <summary> /// Оставляет в текущем множестве только те элементы, /// которые не содержатся одновременно в двух множествах (текущем и указанном) /// </summary> /// <param name="other">Другое множество на основе набора элементов.</param> public void SymmetricExceptWith(IEnumerable <T> other) { SortedLinkedList <T> B = new SortedLinkedList <T>(other, _comp); if (B.Count == 0) { return; } B = B.Difference(this); // B\A ExceptWith(other); // A\B ElementType <T> _nh; ElementType <T> _nt = new ElementType <T>(); Int32 c = 0; __Union(_head, B._head, out _nh, ref _nt, ref c); this._count = c; this._head = _nh; this._tail = _nt; }