2009-10-13 3 views
6

क्या किसी को पता है कि एल्गोरिथ में क्या शामिल है LINQ अपने जॉइन ऑपरेटर के साथ करता है।क्या LINQ नेस्टेड लूप, मर्ज, या हैशसेट का उपयोग कर ऑपरेटर से जुड़ें?

क्या यह नेस्टेड लूप, मर्ज या हैशसेट है? अगर समर्थित है, तो एक अलग निर्दिष्ट करने का कोई तरीका है?

सादर अल्बर्ट

+0

प्रदाता पर निर्भर करता है। –

+0

मेरा मतलब लिंक टू ऑब्जेक्ट्स का उपयोग करते समय था – aattia

उत्तर

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

देखने एक हैश तालिका आंतरिक रूप से चाबी के लिए, इतना है कि यह किसी भी व्यक्ति कुंजी को देखने के लिए सक्षम है का उपयोग करेगा।

संबंधित मुद्दे