2012-10-26 15 views
8

Sto cercando di capire di più su LINQ, per esempio, se voglio realizzare un Select io implementare come questoCome implementare il metodo Linq OrderBy?

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

dove come questo

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

Come su OrderBy?

risposta

12

Dai uno sguardo allo this. Penso che lo troverai molto utile. Fondamentalmente, Jon Skeet re-implementa tutto in Linq come esercizio di apprendimento. Molto informativo.

La seconda parte parla dell'implementazione di Where ... e così via fino a parti che descrivono OrderBy.

1

a seguirti modello di esecuzione corrente si potrebbe provare questo:

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

Questa non è una valida implementazione di 'OrderBy'. Non puoi chiamare 'ThenBy' su questo. – Servy

+0

@Servy - Ho detto che stavo seguendo il modello di implementazione dell'OP e non il modello standard. Se avessi detto "questo è come implementare' OrderBy' ", sarei d'accordo con il tuo commento. – Enigmativity

+1

Non vedo nulla nell'OP che indica che non implementa correttamente 'OrderBy'. Che cosa significa che non dovresti fornire un'implementazione che sia almeno un equivalente funzionale della versione BCL? – Servy

Problemi correlati