2009-10-13 38 views

回答

9

首先,它有效地從「內部」序列創建一個查找,然後通過外序列迭代。然後它可以從外部序列中查找每個鍵併產生每個適當的對。像這樣的東西(忽略參數驗證等):

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

查找將使用哈希表內的鍵,以便它有效地查找任何單個鍵。