見出し画像

C# LINQで「最初の5件を無視する」技術。SkipとSkipWhileでデータを自在に切り取る

C#のLINQを使っていると、データの「先頭から数件」を取得する(Take)だけでなく、逆に「先頭の数件を無視(スキップ)して、残りをすべて取得したい」という場面がよくあります。

  • Webの検索結果で「2ページ目以降」を表示したい。

  • ログデータなどの「最初の準備期間(ノイズ)」を無視して、本番稼働してからのデータだけを分析したい。

このような「読み飛ばし」を実現するのが、SkipSkipWhile メソッドです。


1. 「数」で指定して無視する:Skip(n)


Skipメソッドは非常にシンプルです。 「先頭から N 個」の要素を無視し、それ以降のすべてのデータを返します。

このメソッドが最も活躍するのは、Webサイトやアプリの**「ページング(ページ送り)」処理**です。 例えば、1ページに10件表示する場合、「3ページ目」のデータを取得するにはどうすればよいでしょうか?

「最初の20件(1&2ページ目)を**Skip(スキップ)して、その後の10件をTake(取得)**する」

この Skip と Take の黄金コンビネーションこそが、ページング処理の基本ロジックです。


2. 「条件」で指定して無視する:SkipWhile(条件)


一方、SkipWhileメソッドは、より動的な処理が可能です。 これは、「先頭から、条件を満たしている間だけ」要素を無視し続けます。

例えば、サーバーのCPU使用率のログデータがあるとします。 起動直後はアイドリング状態で使用率が低く、途中から処理が始まって使用率が上がるとします。この「起動直後の低いデータ」だけを無視したい場合、どうすればよいでしょうか?

SkipWhileを使って、「使用率が20%未満である間はスキップする」と指定すれば、使用率が上がった瞬間からの「本当に必要なデータ」だけをきれいに抽出することができます。

(※注意点として、一度でも条件を満たさなくなったら、そこでスキップは終了します。その後ろで再び使用率が下がったとしても、それらは無視されず、すべて取得されます)


続きはブログで:ページングの実装コードとSkipWhileの挙動


この記事では、データを「途中から」利用するためのSkipとSkipWhileの概念についてご紹介しました。

「では、ページング計算((ページ数 - 1) * 件数)を組み込んだ、具体的なC#コードはどう書く?」 「SkipとTakeを組み合わせた時の、メソッドチェーンの書き方は?」 「SkipWhileで、条件不一致になった後にデータがどう取得されるか、実際のログデータを使った実行結果が見たい」

と思われた方もいらっしゃるかと思います。

私の運営する技術ブログでは、この記事の続きとして、ページング機能の実装サンプルや、SkipWhileを使ったログ解析のコード例を、実行結果と共に詳しく解説しています。

データの「範囲」を自在に操るための必須知識です。詳細は、ぜひ以下のリンクからご覧ください。

▼ブログ記事はこちら 【C#】LINQのSkipとSkipWhile:シーケンスの先頭要素を無視して残りを取得する方法


いいなと思ったら応援しよう!