如何实现Linq OrderBy方法?

时间:2012-10-26 00:23:01

标签: c# linq

我想了解更多有关linq的信息,例如,如果我想实现一个Select我会像这样实现

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怎么样?

2 个答案:

答案 0 :(得分:14)

看看this。我想你会发现它非常有用。基本上,Jon Skeet重新实施Linq中的所有内容作为学习练习。非常有用。

第二部分讨论实施Where ......等等,直到描述OrderBy的部分。

答案 1 :(得分: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;
    }
}