10

我正在尝试更多地了解 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 怎么样?

4

2 回答 2

18

看看这个。我想你会发现它非常有用。基本上,Jon Skeet 将 Linq 中的所有内容重新实现为学习练习。信息量很大。

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

于 2012-10-26T00:25:57.080 回答
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;
    }
}
于 2012-10-26T04:09:59.873 回答