예제 #1
0
        /// <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));
        }
예제 #2
0
        /// <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;
        }