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

C#のQueryable SkipWhile()メソッドの使い方を解説

C#のLINQに用意されているSkipWhile()メソッドを使うと、指定した条件が成立している間、配列やコレクションの要素を読み飛ばし(スキップし)、残りの要素を取得することができます。

サンプルデータの準備

まずは、次のような整数型の配列を用意します。

int[] marks = { 45, 88, 55, 90, 95, 85 };

この配列から「60以上の要素」を読み飛ばしてみましょう。条件はラムダ式で指定します。

IEnumerable<int> selMarks = marks.AsQueryable().OrderByDescending(s => s).SkipWhile(s => s >= 60);

ここでは、AsQueryable()で配列をIQueryable型に変換したうえで、OrderByDescending()によって降順に並べ替えを行い、その後SkipWhile()で60以上の要素を先頭から順にスキップしています。

完全なコード例

using System;
using System.Linq;
using System.Collections.Generic;

public class Demo {
    public static void Main() {
        int[] marks = { 45, 88, 55, 90, 95, 85 };

        // 60より大きい要素をスキップする
        IEnumerable<int> selMarks = marks.AsQueryable().OrderByDescending(s => s).SkipWhile(s => s >= 60);

        // 残りの要素を表示する
        Console.WriteLine("Skipped marks > 60...");
        foreach (int res in selMarks) {
            Console.WriteLine(res);
        }
    }
}

実行結果

Skipped marks > 60...
55
45

解説のポイント

降順に並べ替えた結果は「95, 90, 88, 85, 55, 45」となります。SkipWhile()は条件(ここでは60以上)が真である間だけ要素をスキップするため、最初の4つの要素(95, 90, 88, 85)が読み飛ばされ、条件を満たさなくなった時点以降の「55」と「45」が出力されます。

なお、SkipWhile()は一度でも条件が偽になると、それ以降の要素はすべてそのまま返される点に注意してください。つまり、途中で条件を満たさない要素が現れた場合、それ以降に再び条件を満たす要素があってもスキップされません。

  1. C#のCompareTo()メソッドの使い方を解説

    C#では、2つの値を比較する際にCompareTo()メソッドを使用します。このメソッドは、呼び出し元の値と引数で渡した値を比較し、その大小関係を整数値として返します。CompareTo()メソッドの戻り値CompareTo()メソッドの戻り値は以下の3パターンです。0 = 両方の値が等しい場合1 = 呼び出し元の値が引数の値より大きい場合(第2の数値が小さい)-1 = 呼び出し元の値が引数の値より小さい場合(第1の数値が小さい)CompareTo()メソッドの実装例それでは、C#でCompareTo()メソッドを実装するサンプルコードを見てみましょう。ここでは、同じ値を持つ2つのint型変数

  2. RubyのArray#zipメソッド徹底解説!2つの配列をスマートに結合する方法

    2つの配列を要素ごとに比較して、その違いを見つけたいと思ったことはありませんか? あるいは、各インデックスごとに最大の数値を求めたい、キーのリストと値のリストを組み合わせてハッシュを作りたい――そんな場面にも出会うことがあるでしょう。 …これを「面倒な方法」で実装すると、次のようなコードになります。 例:冗長な書き方 a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 確かに動作はしますが