コレクションの終わりを理解することは、さまざまなプログラミング シナリオにおける共通の要件です。この記事では、コレクションの最後の N 要素を効果的に抽出するために LINQ がどのように役立つかを検討します。
フレームワークはこの正確なタスクのための専用メソッドを提供しませんが、次の機能を活用できます。 LINQ を使用して、目的を達成するエレガントな拡張メソッドを作成します。次のコード スニペットは、この拡張メソッドを示しています。
collection.Skip(Math.Max(0, collection.Count() - N));
このアプローチには、いくつかの重要な利点があります。
一部のプロバイダー (Entity Framework など) が ArgumentException をスローする可能性があるため、負の数を指定して Skip を呼び出すことを避けることが重要です。 Math.Max 呼び出しは、この問題に対する保護策です。
便宜上、拡張メソッドを別のクラスにパッケージ化できます。
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)); } }
この拡張メソッドを使用すると、最後の N を取得できます。
collection.TakeLast(5);
のような簡潔な構文を使用して列挙可能な要素を処理します。このアプローチは一般にパフォーマンスが高いですが、重要です。潜在的なパフォーマンスへの影響を認識するため。 Count() の呼び出しにより、特定のデータ構造に対して複数の列挙がトリガーされる場合があります。これを回避するには、前方専用の列挙型に対して代替のワンパス アルゴリズム (バッファリングなど) を検討してください。
以上がLINQ はコレクションの最後の N 要素を効率的に取得するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。