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

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

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-04 19:56:44851ブラウズ

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

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

コレクションから指定された数の最終要素を取得することは、頻繁に必要となることがあります。フレームワークは専用のメソッドを提供していない可能性がありますが、拡張メソッドは有益です。

TakeLast 拡張メソッドの使用

最後の N 要素を抽出する効率的な方法は、 LINQ の Skip メソッド。次のコードはその使用法を示しています。

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

項目の順序を保持するこの手法により、並べ替えが回避され、さまざまな LINQ プロバイダーとの互換性が確保されます。特定のプロバイダー (Entity Framework など) では例外が発生する可能性があるため、負の引数を Skip に渡さないように注意する必要があります。

拡張メソッドの実装

以下のコードカスタム TakeLast 拡張機能を提示しますメソッド:

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

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

データ構造によっては、カウント (Count() による) により複数の列挙が発生する可能性があります。特定のデータ型やシナリオには最適化が存在しますが、このアプローチは前方専用の列挙型には適していない可能性があります。

代替ワンパス アルゴリズム

パフォーマンスが低下する場合重要な代替ワンパス アルゴリズムを使用できます。これらのアプローチでは、一時バッファーを利用して項目を蓄積し、コレクションの終わりに達すると最後の N 要素を生成します。 Lasse V. Karlsen と Mark Byers によって開発された技術は、そのようなアルゴリズムの例です。

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

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