2

コードのいくつかを見ると、使用されているSystem.Linqいくつかの例に出くわしましたBuffer<TSource>

例でEnumemerable.ReverseIteratorは、バッファを使用する利点は何ですか?

private static IEnumerable<TSource> ReverseIterator<TSource>(
                                                        IEnumerable<TSource> source)
    {
      Buffer<TSource> buffer = new Buffer<TSource>(source);
      for (int i = buffer.count - 1; i >= 0; --i)
        yield return buffer.items[i];
    }
4

2 に答える 2

2

逆の順序でそれらを返すことができるように、何かがシーケンス全体を読み取る必要があります。Buffer<TSource>はここでの 1 つのオプションであり、効率的なオプションですが、またはで実装できます。バッファを使用すると、「オーバーサイズ」の配列を作成できます (リストの場合と同じ方法ですが、バージョン管理が少ないなど) 。ToArray()ToList()ToArray

私のEdulinq (楽しみと教育のための LINQ to Objects の再実装) のいくつかの興味深い記事を見つけることができます。

(同様の「バッファ」のアイデアにつながる進化を示すため、意図的にその順序で。)

于 2012-06-23T20:02:52.587 に答える
1

バッファは、イテレータの検証とバージョン管理による内部オーバーヘッドがあるToListため、より効率的です。最終的なコピー パスが必要です。List<T>ToArray

また、Buffer は構造体であり、1 つの割り当てを回避します。

Buffer<T>これらのオーバーヘッドのない内部クラスです。これは純粋にパフォーマンスの最適化です。

于 2012-06-23T20:07:23.597 に答える