uniblab icon

EnumerableHelper

uniblab | PRO | 03/20/18 03:33:07 PM UTC | 0 ⭐ | 1398 👁️ | Never ⏰ | []
C# |

1.58 KB

|

None

|

0 👍

/

0 👎

using System.Linq;
 
public static class Enumerable {
 
    public static System.Collections.Generic.IEnumerable<TOuter> Except<TOuter, TInner, TKey, TResult>(
        this System.Collections.Generic.IEnumerable<TOuter> outer,
        System.Collections.Generic.IEnumerable<TInner> inner,
        System.Func<TOuter, TKey> outerKeySelecter,
        System.Func<TInner, TKey> innerKeySelecter
    ) {
        var comparer = System.Collections.Generic.EqualityComparer<TKey>.Default;
 
        var i = inner.ToDictionary( innerKeySelecter, comparer );
        return outer.Where(
            x => !i.ContainsKey( outerKeySelecter( x ) )
        );
    }
 
    public static System.Collections.Generic.IEnumerable<TOuter> Except<TOuter, TInner, TKey, TResult>(
        this System.Collections.Generic.IEnumerable<TOuter> outer,
        System.Collections.Generic.IEnumerable<TInner> inner,
        System.Func<TOuter, TKey> outerKeySelecter,
        System.Func<TInner, TKey> innerKeySelecter,
        System.Collections.Generic.IEqualityComparer<TKey> comparer
    ) {
        var i = inner.ToDictionary( innerKeySelecter, comparer );
        return outer.Where(
            x => !i.ContainsKey( outerKeySelecter( x ) )
        );
    }
 
    public static System.Collections.Generic.IDictionary<K, V> ToDictionary<K, V>(
        this System.Collections.Generic.IEnumerable<V> collection,
        System.Func<V, K> keySelector,
        System.Collections.Generic.IEqualityComparer<K> keyComparer
    ) {
        System.Collections.Generic.IDictionary<K, V> output = new System.Collections.Generic.Dictionary<K, V>( keyComparer );
        foreach ( var item in collection ) {
            output.Add( keySelector( item ), item );
        }
        return output;
    }
 
}

Comments