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 のすべてを再実装します。非常に有益です。

2 番目の部分では、実装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 に答える