Пример #1
0
 public static IEnumerable <TSource> Union <TSource>(
     this IEnumerable <TSource> first,
     IEnumerable <TSource> second,
     IEqualityComparer <TSource> comparer = null) => Defer(() =>
 {
     LinqToObjects.HashSet <TSource> hashSet = new LinqToObjects.HashSet <TSource>(comparer);
     return(first.Where(hashSet.Add).Concat(second.Where(hashSet.Add)));
 });
Пример #2
0
 public static IEnumerable <TSource> Intersect <TSource>(
     this IEnumerable <TSource> first,
     IEnumerable <TSource> second,
     IEqualityComparer <TSource> comparer = null) => Defer(() =>
 {
     LinqToObjects.HashSet <TSource> hashSet = new LinqToObjects.HashSet <TSource>(comparer);
     second.Iterate(secondValue => hashSet.Add(secondValue));
     return(first.Where(hashSet.Remove));
 });
Пример #3
0
        public static IEnumerable <TSource> Except <TSource>(
            this IEnumerable <TSource> first,
            IEnumerable <TSource> second,
            IEqualityComparer <TSource> comparer = null) => Defer(() =>
        {
            comparer = comparer ?? EqualityComparer <TSource> .Default;
            LinqToObjects.HashSet <TSource> hashSet = new LinqToObjects.HashSet <TSource>(comparer);
            foreach (TSource secondValue in second)
            {
                hashSet.Add(secondValue);
            }

            return(first.Where(hashSet.Add));
        });
Пример #4
0
 public static IEnumerable <TSource> Distinct <TSource>
     (this IEnumerable <TSource> source, IEqualityComparer <TSource> comparer = null) => Defer(() =>
 {
     LinqToObjects.HashSet <TSource> hashSet = new LinqToObjects.HashSet <TSource>(comparer);
     return(source.Where(hashSet.Add));
 });