2012-10-26 42 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