読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET 絡みのメモを公開しています。

Linq入門記-42 (LINQ To Object, Any)

C# Linq


今回は、Any拡張メソッドについてです。


Any拡張メソッドは、一つでも条件に合致するものが存在するか否かを判別するメソッドです。
量指定子演算子と呼ばれます。(他にも、All, Containsが存在します。)


特定の条件に合致する要素がシーケンス内に存在するか否かを確認する際などに利用します。
Any拡張メソッドを利用せずに、Whereで絞り込んでからCountで件数を確認しても同じ事になりますが
Anyで聞いた方が楽です。


書式は以下の通り。

public static bool Any<TSource>(
	this IEnumerable<TSource> source
)

public static bool Any<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)


一つ目の書式は、predicateを指定しないバージョンです。
この書式を利用した場合、シーケンス内に要素が一つでも存在するとTrueとなります。
つまり、シーケンスに要素が存在するか否かを確認できます。


2つ目がpredicateを指定するバージョンです。
他の拡張メソッドと同じく、指定したpredicateがシーケンスの各要素に適用され
一つでも合致するものが存在する場合、結果がTrueとなります。


以下、サンプルです。

    #region LinqSamples-39
    public class LinqSamples39 : IExecutable
    {
        public void Execute()
        {
            var numbers = new int[]{ 1, 2, 3 };
            
            // 
            // Any拡張メソッドは、一つでも条件に当てはまるものが存在するか否かを判別するメソッドである。
            // この拡張メソッドは、引数無しのバージョンと引数にpredicateを渡すバージョンの2つが存在する。
            //
            // 引数を渡さずAny拡張メソッドを呼んだ場合、Any拡張メソッドは
            // 該当シーケンスに要素が存在するか否かのみで判断する。
            // つまり、要素が一つでも存在する場合は、Trueとなる。
            //
            // 引数にpredicateを指定するバージョンは、シーケンスの各要素に対してpredicateを適用し
            // 一つでも条件に合致するものが存在した時点で、Trueとなる。
            //
            Console.WriteLine("=========== 引数無しでAny拡張メソッドを利用 ============");
            Console.WriteLine("要素有り? = {0}", numbers.Any());
            Console.WriteLine("===================================================");
            
            Console.WriteLine("=========== predicateを指定してAny拡張メソッドを利用 ===========");
            Console.WriteLine("要素有り? = {0}", numbers.Any(item => item >= 5));
            Console.WriteLine("要素有り? = {0}", numbers.Any(item => item <= 5));
            Console.WriteLine("==========================================================");
        }
    }
    #endregion


実行結果は以下の通りです。

  =========== 引数無しでAny拡張メソッドを利用 ============
  要素有り? = True
  ===================================================
  =========== predicateを指定してAny拡張メソッドを利用 ===========
  要素有り? = False
  要素有り? = True
  ==========================================================

================================
過去の記事については、以下のページからご参照下さい。