2012-10-26 21 views
8

मैं,, LINQ के बारे में अधिक समझने के लिए कोशिश कर रहा हूँ, उदाहरण के लिए अगर मैं एक का चयन मैं इसलिंक ऑर्डरबी विधि को कैसे कार्यान्वित करें?

public static IEnumerable<TResult> Select<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, TResult> selector) 
{ 
    foreach (var item in source) 
    { 
     yield return selector(item); 
    } 
} 
जहां इस

public static IEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate) 
{ 
    foreach (var item in source) 
    { 
     if (predicate(item)) 
      yield return item; 
    } 
} 
कैसे OrderBy के बारे में

तरह

तरह लागू करेगा लागू करना चाहते हैं?

उत्तर

12

this पर एक नज़र डालें। मुझे लगता है कि आपको यह बहुत उपयोगी लगेगा। असल में, जॉन स्कीट एक सीखने के अभ्यास के रूप में लिंक में सबकुछ फिर से लागू करता है। बहुत सूचनाप्रद।

दूसरा भाग Where को लागू करने के बारे में बात करता है ... और ऐसे हिस्सों तक जो OrderBy का वर्णन करते हैं।

1

आप वर्तमान कार्यान्वयन पैटर्न का पालन करने के लिए आप इस कोशिश कर सकते:

public static IEnumerable<TSource> OrderBy<TSource, TKey>(
    IEnumerable<TSource> source, Func<TSource, TKey> keySelector) 
{ 
    var items = source.ToArray(); 
    var keys = items.Select(keySelector).ToArray(); 
    Array.Sort(keys, items); 
    foreach (var item in items) 
    { 
     yield return item; 
    } 
} 
+2

यह 'OrderBy' का एक मान्य कार्यान्वयन नहीं है। आप इस पर 'तबबी' नहीं कह सकते हैं। – Servy

+0

@ सर्वी - मैंने कहा था कि मैं ओपी के कार्यान्वयन पैटर्न का पालन कर रहा था, न कि मानक पैटर्न। अगर मैंने कहा था "यह 'ऑर्डरबी' को कार्यान्वित करने का तरीका है, तो मैं आपकी टिप्पणी से सहमत हूं। – Enigmativity

+1

मुझे ओपी में कुछ भी नहीं दिख रहा है जो यह इंगित करता है कि यह 'ऑर्डरबी' को सही तरीके से लागू नहीं करता है। इसके बारे में क्या इंगित करता है कि आपको एक कार्यान्वयन प्रदान नहीं करना चाहिए जो कम से कम बीसीएल संस्करण के कार्यात्मक समकक्ष है? – Servy

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