2012-10-26 72 views
8

我想更多地瞭解LINQ,例如,如果我想實現一個選擇,我會實現這樣的如何實現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); 
    } 
} 

哪裏像這樣

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

如何排序依據?

回答

12

看看this。我想你會發現它非常有用。基本上,Jon Skeet重新實現了Linq中的一切,作爲學習練習。非常豐富。

第二部分討論實施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'的'有效實施。你不能在這上面調用ThenBy。 – Servy

+0

@Servy - 我的確說過我遵循OP的實現模式,而不是標準模式。如果我說「這是如何實現'OrderBy'」,那麼我會同意你的評論。 – Enigmativity

+1

我在OP中看不到任何內容,表示它沒有正確執行'OrderBy'。那麼它是什麼意思表明你不應該提供一個至少與BCL版本功能相當的實現? – Servy