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 サイトの他の関連記事を参照してください。