2009-10-13 3 views

Odpowiedz

9

pierwsze skutecznie tworzy wyszukiwanie od „wewnętrznego” sekwencja, następnie przechodzi przez zewnętrzną sekwencji. Następnie może wyszukać każdy klucz z zewnętrznej sekwencji i uzyskać każdą odpowiednią parę. Coś jak ten (walidacji argumentów ignorując etc):

public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult> 
    (this IEnumerable<TOuter> outer, 
    IEnumerable<TInner> inner, 
    Func<TOuter, TKey> outerKeySelector, 
    Func<TInner, TKey> innerKeySelector, 
    Func<TOuter, TInner, TResult> resultSelector) 
{ 
    Lookup<TKey, TInner> lookup = inner.ToLookup(innerKeySelector); 
    foreach (TOuter outerItem in outer) 
    { 
     TKey key = outerKeySelector(outerItem); 
     foreach (TInner innerItem in lookup[key]) 
     { 
      yield return resultSelector(outerItem, innerItem); 
     } 
    } 
} 

na wyszukanie użyje tabeli mieszania wewnętrznie do kluczy, dzięki czemu jest to skuteczne, aby wyszukać dowolny indywidualny klucz.

Powiązane problemy