2012-10-26 14 views
8

Ich versuche, mehr über Linq, zum Beispiel zu verstehen, wenn ich einen auswählen implementieren möchte ich wie dieseWie implementiert man die Linq OrderBy-Methode?

public static IEnumerable<TResult> Select<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, TResult> selector) 
{ 
    foreach (var item in source) 
    { 
     yield return selector(item); 
    } 
} 

wo ähnliche

public static IEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate) 
{ 
    foreach (var item in source) 
    { 
     if (predicate(item)) 
      yield return item; 
    } 
} 

Wie wäre es SortiertNach umsetzen?

Antwort

12

Werfen Sie einen Blick auf this. Ich denke, du wirst es sehr nützlich finden. Im Grunde genommen implementiert Jon Skeet alles in Linq als Lernübung neu. Sehr informativ.

Der zweite Teil spricht über die Implementierung Where ... und so weiter bis Teile, die OrderBy beschreibt.

1

Sie Muster aktuelle Implementierung folgen Sie dies versuchen könnte:

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

Dies ist keine gültige Implementierung von 'OrderBy'. Sie können 'ThenBy' nicht darauf ansprechen. – Servy

+0

@Servy - Ich habe gesagt, dass ich dem Implementierungsmuster des OP gefolgt bin und nicht dem Standardmuster. Hätte ich gesagt "So wird OrderBy' implementiert", dann stimme ich Ihrem Kommentar zu. – Enigmativity

+1

Ich sehe nichts im OP, das anzeigt, dass es 'OrderBy' nicht korrekt implementiert. Wie steht es damit, dass Sie keine Implementierung bereitstellen sollten, die mindestens der BCL-Version entspricht? – Servy

Verwandte Themen