Ejemplo n.º 1
0
        /// <summary>
        /// Vrátí pole prvků, které nejsou v this kolekci a jsou jen v dodané kolekci <paramref name="newItems"/>.
        /// Pro určení shody používá klíč, který z prvku získá dodaný <paramref name="keySelector"/>.
        /// Mějme kolekci this obsahující záznamy { 1,2,3,4,5 } a kolekci <paramref name="newItems"/> obsahující záznamy { 4,5,6,7 }, pak výsledek bude kolekce { 6,7 }
        /// = tedy to, co je v kolekci <paramref name="newItems"/> navíc nad rámec this.
        /// Vrácená kolekce obsahuje prvky ze seznamu newItems.
        /// Kolekce <paramref name="newItems"/> nesmí být null.
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="items"></param>
        /// <param name="keySelector"></param>
        /// <param name="newItems"></param>
        /// <returns></returns>
        public static TValue[] SyncOnlyNew <TKey, TValue>(this IEnumerable <TValue> items, Func <TValue, TKey> keySelector, IEnumerable <TValue> newItems)
        {
            SynchronizedPair <TKey, TValue>[] syncItems = SynchronizedPair <TKey, TValue> .CreateSynchron(keySelector, items, newItems);

            return(syncItems
                   .Where(i => i.ItemOnSide == SynchronizedSide.Right)
                   .Select(i => i.ItemRight)
                   .ToArray());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Vrátí pole prvků, které jsou pouze v jedné z kolekcí (v this anebo v dodané kolekci <paramref name="newItems"/>), tedy vrátí rozdíly.
        /// Pro určení shody používá klíč, který z prvku získá dodaný <paramref name="keySelector"/>.
        /// Mějme kolekci this obsahující záznamy { 1,2,3,4,5 } a kolekci <paramref name="newItems"/> obsahující záznamy { 4,5,6,7 }, pak výsledek bude kolekce { 4,5 }
        /// = tedy to, co je v kolekci this a přitom je v <paramref name="newItems"/>.
        /// Vrácená kolekce obsahuje prvky ze seznamu this.
        /// Kolekce <paramref name="newItems"/> smí být null, pak se vrací vstupní kolekce (this) jako new Array.
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="items"></param>
        /// <param name="keySelector"></param>
        /// <param name="newItems"></param>
        /// <returns></returns>
        public static TValue[] SyncDifferent <TKey, TValue>(this IEnumerable <TValue> items, Func <TValue, TKey> keySelector, IEnumerable <TValue> newItems)
        {
            if (newItems == null)
            {
                return(items.ToArray());
            }

            SynchronizedPair <TKey, TValue>[] syncItems = SynchronizedPair <TKey, TValue> .CreateSynchron(keySelector, items, newItems);

            return(syncItems
                   .Where(i => (i.ItemOnSide == SynchronizedSide.Left || i.ItemOnSide == SynchronizedSide.Right))
                   .Select(i => (i.ItemOnSide == SynchronizedSide.Left ? i.ItemLeft : i.ItemRight))
                   .ToArray());
        }