, IEqualityComparer<T>, GroupJoin, T.
, :
- -
Tuple<int, int> Item1, min Item2 , , Item1 Item2 .... , . , . . GroupJoin.
, .
- . .
public static IEnumerable<IGrouping<TKey, TValue>> GroupJoin<TKey, TValue>(this IEnumerable<TValue> values, IEnumerable<TKey> keys, Func<TKey, TValue, bool> predicate)
{
return values.SelectMany(v => keys, (v, k) => new { v, k })
.Where(c => predicate(c.k, c.v))
.GroupBy(c => c.k, c => c.v);
}
, , , , .
, , . , , - , , ints, , , , .
, - :
var keys = new Tuple<int, int>[] { Tuple.Create(1, 5), Tuple.Create(5, 10) };
var array = new[] { 3, 4, 7, 9 };
var groups = array.GroupJoin(keys, (a, b) => a.Item1 <= b && a.Item2 > b);