C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# LINQでSkip演算子とTake演算子を組み合わせて使う方法

C# の LINQ には、シーケンス(コレクション)から要素を取得・除外するための便利な演算子が用意されています。Take 演算子は配列やリストの先頭から指定した数の要素を返し、Skip 演算子は先頭から指定した数の要素を読み飛ばします。

両者を組み合わせることで、「コレクションの途中の範囲だけを取り出す」という処理を簡潔に記述できます。ページネーション(ページング)処理などでよく使われる定番パターンです。

Skip 演算子とは

Skip 演算子は、シーケンスの最初の要素から指定した位置までの要素を読み飛ばし、残りの要素を返します。

Take 演算子とは

Take 演算子は、シーケンスの最初の要素から指定した位置までの要素を取得して返します。

例1:Skip 演算子の基本的な使い方

class Program{
    static void Main(string[] args){
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
        System.Console.WriteLine(numbers.Count());
        var skipRes = numbers.Skip(5);
        System.Console.WriteLine(skipRes.Count());
        Console.ReadLine();
    }
}

この例では、28個の要素を持つリストに対して Skip(5) を適用しているため、先頭の5個が読み飛ばされ、残りの23個が結果として得られます。

出力

28
23

例2:Take 演算子の基本的な使い方

class Program{
    static void Main(string[] args){
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
        System.Console.WriteLine(numbers.Count());
        var takeRes = numbers.Take(5);
        System.Console.WriteLine(takeRes.Count());
        Console.ReadLine();
    }
}

こちらは Take(5) を適用しているため、先頭から5個の要素だけが取得されます。

出力

28
5

例3:Skip と Take を組み合わせる

Skip と Take を連結して呼び出すことで、シーケンスの中間部分だけを取り出せます。まず Skip(10) で先頭の10個を読み飛ばし、続けて Take(18) でその後の18個を取得しています。

class Program{
    static void Main(string[] args){
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
        System.Console.WriteLine(numbers.Count());
        var takeSkipRes = numbers.Skip(10).Take(18);
        System.Console.WriteLine(takeSkipRes.Count());
        Console.ReadLine();
    }
}

出力

28
18

実務での活用例:ページネーション

Skip と Take の組み合わせは、検索結果のページング処理で特に役立ちます。たとえば「1ページあたり20件表示する場合の3ページ目」は、次のように記述できます。

var pageData = allItems.Skip((pageNumber - 1) * pageSize).Take(pageSize);

このように、Skip と Take を組み合わせれば、コレクション内の任意の範囲を柔軟かつ効率的に抽出できます。LINQ の遅延実行の仕組みにより、必要になるまで実際の列挙は行われないため、大きなデータセットでもパフォーマンス面のメリットがあります。

  1. WindowsサンドボックスとVMware・VirtualBoxを併用する方法|ブートエントリの切り替え手順

    Windows サンドボックスは、Windows 11/10 上で動作するために Hyper-V 機能を利用しています。そのため、Hyper-V が有効になっている環境では、VMware や VirtualBox といったサードパーティ製の仮想化ソフトウェアを同時に実行することができません。 しかし、この制限はいくつかの工夫によって回避できます。Windows Sandbox の利用を目的として Windows 10(または Windows 11)へアップグレードしたものの、特定の作業では引き続き PC 上の仮想マシンに頼っている方にとって、この方法は非常に役立つでしょう。 Windows

  2. CortanaとAlexaを連携して使う方法|Windows 10とAmazon Echoで両アシスタントを活用

    Microsoftは、Build開発者向けカンファレンスでの発表をもとに、Windows 10 PCへのAlexa搭載と、Amazon EchoスピーカーへのCortana搭載を実現しました。現在、プレビュー版は米国限定で提供されていますが、この2大音声アシスタントの提携は今後さらに発展していくことが期待されます。 私たちが暮らす現代は多様化した世界であり、1台のデバイスに複数のアシスタントを搭載することには大きなメリットがあります。個別のOSとしてではなく、まるでアプリのようにアシスタントへアクセスできるのは非常に便利です。 現時点での連携機能はまだ基本的なものですが、近いうちにCortan