ホームページ >バックエンド開発 >C++ >LINQ コレクションの最後の N 要素を効率的に取得するにはどうすればよいですか?

LINQ コレクションの最後の N 要素を効率的に取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-03 04:04:38761ブラウズ

How Can I Efficiently Retrieve the Last N Elements of a LINQ Collection?

LINQ を使用したコレクションの最後の N 要素の取得

LINQ では、コレクションの最後の N 要素を取得するには、次の組み合わせを使用します。 Skip() メソッドと Count() メソッドの。 Skip() メソッドを使用すると、コレクションの先頭から指定した数の要素をスキップできます。一方、Count() は、コレクション内の要素の総数を返します。

最後の N 要素を取得するには、次のようにします。コレクションの合計数を決定し、そこから N を減算します。結果の値は Skip() に渡され、最初の (count - N) 要素がスキップされ、最後の N 要素だけが残ります。これは次のように表現できます:

collection.Skip(Math.Max(0, collection.Count() - N));

このアプローチにより、ソートを必要とせずに要素の順序を効果的に保持できます。また、複数の LINQ プロバイダー間での互換性も確保されます。

拡張メソッドの実装

上記のアプローチを利用した TakeLast(int N) の拡張メソッドの実装を次に示します。

public static class MiscExtensions
{
    public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> source, int N)
    {
        return source.Skip(Math.Max(0, source.Count() - N));
    }
}

この拡張メソッドは次のように使用できます。

collection.TakeLast(5);

パフォーマンスに関する考慮事項

このアプローチは一般に効率的ですが、特定のデータ構造に対する Count() の呼び出しの影響を考慮する価値があります。場合によっては、これによりデータ構造全体が列挙される可能性があります。前方専用の列挙型が必要で、データの複数回のパスを回避する必要がある状況では、パフォーマンスをさらに最適化できます。このような場合には、一時バッファを利用する代替のワンパス アルゴリズムを使用できます。

以上がLINQ コレクションの最後の N 要素を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。