AnyやAllメソッドによる要素のチェック

プログラミングC# 第6版 8.3.8


Anyメソッドを使うことで、ある条件に合う要素が一つでも存在しているかどうかのチェックを行うことができます。

using System;
using System.Linq;

class Program {
    static void Main() {
        int[] nums1 = new int[] {1,3,5,7}; // 偶数なし
        int[] nums2 = new int[] {1,3,5,8}; // 偶数あり
        
        // 各配列に偶数が含まれているかどうかをチェックする
        Console.WriteLine("{0}", nums1.Any(i => i % 2 == 0) );
        Console.WriteLine("{0}", nums2.Any(i => i % 2 == 0) );
    }
}
$ main
False
True

また、Anyメソッドを引数なしで呼ぶと、一つでも要素があるかどうかをチェックすることができます。

class Program {
    static void Main() {
        int[] nums1 = new int[] {};  // 要素なし
        int[] nums2 = new int[] {1}; // 要素あり
        
        // 各配列に一つでも要素が存在してるかどうかチェックする
        Console.WriteLine("{0}", nums1.Any() );
        Console.WriteLine("{0}", nums2.Any() );
    }
}
$ main
False
True

次にAllメソッドは、全ての要素がある条件に合うかどうかをチェックすることができます。

class Program {
    static void Main() {
        int[] nums1 = new int[] {1,3,5,8}; // 一つだけ偶数
        int[] nums2 = new int[] {2,4,6,8}; // 全て偶数
        
        // 各配列が全て偶数かどうかをチェックする
        Console.WriteLine("{0}", nums1.All(i => i % 2 == 0) );
        Console.WriteLine("{0}", nums2.All(i => i % 2 == 0) );
    }
}
$ main
False
True

またAllメソッドは要素が空の時にはTrueを返します。これは条件に合わない場合にFalseを返すという実装になっているためらしいです。

ただまぁそもそも要素が空の配列に対してAllメソッド使うこと自体おかしいので気にする必要はなさそうですね。