2009-10-13 12 views

cevap

9

ilk etkin sonra, bir "iç" sekansından dış dizisi boyunca yineler bir arama oluşturur. Daha sonra her bir anahtarı dış diziden arayabilir ve her uygun çifti verebilir. Bu (gözardı argüman doğrulama vs) gibi bir şey: o herhangi bir bireysel anahtarı aramak için verimli olacak şekilde

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); 
     } 
    } 
} 

arama, anahtarlar için içten bir karma tablo kullanacaktır.