エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【C#】【LINQ】Anyメソッドについて解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#LINQAnyメソッドについて解説します。

スポンサーリンク

 

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

Anyメソッドとは

リスト配列に対して、

  1. 要素があるかどうか
  2. 特定の条件の要素があるかどうか

を調べるときに使います。
引数の数によって処理内容が異なります。

引数なし Any<TSource>(IEnumerable<TSource>) シーケンスに要素が含まれているかどうかを判断します。
引数が1つ Any<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) シーケンスの任意の要素が条件を満たしているかどうかを判断します。

Enumerable.Any Method (System.Linq) | Microsoft Docsから引用させて頂きました

どういう風に使っているのかを見た方が理解が早いと思うので、実際にAnyメソッドを使ってみます。

解説に使うC#プログラム

解説では

  1. Anyメソッドに引数が無い場合
  2. Anyメソッドに引数がある場合

2種類のプログラムを作ります。
どちらもAnyメソッドを使った結果をコンソールに表示させます。

コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

解説その1:Anyメソッドに引数が無い場合

Anyメソッドに引数が無い場合の使い方を解説します。
解説で使うプログラムは、要素が無い配列と要素が配列を作成します。
その配列に対して、Anyメソッドを使い、結果をコンソールに表示します。

C#

using System;
using System.Linq;

namespace ConsoleApp1
{
    /// <summary>
    /// LINQのAnyメソッドの練習クラスその1
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 要素が無い配列と、ある配列を作成
            int[] notNumbers = { };
            int[] numbers = { 1, 2, 3, 4, 5 };

            // 要素があるか判定
            bool numbersResult = numbers.Any();
            bool notNumbersResult = notNumbers.Any();

            // 結果をコンソールに出力
            Console.WriteLine("numbersの結果:" + numbersResult);
            Console.WriteLine("notNumbersの結果:" + notNumbersResult);
        }
    }
}

実行結果

f:id:Tairax:20190205084359p:plain

numbersの結果:True
notNumbersの結果:False
続行するには何かキーを押してください . . .

では、解説します。

解説

リスト配列に対して引数がないAnyメソッドを使った場合、そのリストや配列に要素があるかどうかを判定してくれます。
戻り値は

要素がある場合 true
要素が無い場合 false

です。
今回の解説でAnyメソッドを使っているのはここです。

bool numbersResult = numbers.Any();
bool notNumbersResult = notNumbers.Any();

それぞれの配列に対して、Anyメソッドを使っています。
なので戻り値も

numbersResult true
notNumbersResult false

とコンソールに表示されています。

解説その2:Anyメソッドに引数がある場合

Anyメソッドに引数がある場合の使い方を解説します。
解説で使うプログラムは、2つのリストに対してAnyメソッドを使って4文字以上の要素があるか調べます。
結果をコンソールに表示します。

C#

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

namespace ConsoleApp1
{
    /// <summary>
    /// LINQのAnyメソッドの練習クラスその2
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            List<string> shortNameList = new List<string> {"ピィ", "ピッピ", "プリン"};
            List<string> longNameList = new List<string> {"ラグラージ", "キモリ", "アチャモ" };

            bool shortNameListResult = shortNameList.Any(shortName => shortName.Length > 4);
            bool longNameListResult = longNameList.Any(longName => longName.Length > 4);

            Console.WriteLine("shortNameListは4文字より長い名前があるか:" + shortNameListResult);
            Console.WriteLine("longNameListResultは4文字より長い名前があるか:" + longNameListResult);
        }
    }
}

実行結果

f:id:Tairax:20190205213801p:plain

shortNameListは4文字より長い名前があるか:False
longNameListResultは4文字より長い名前があるか:True
続行するには何かキーを押してください . . .

では、解説します。

解説

Anyメソッドに引数を指定する場合、何かしらの処理を記載します。
今回の場合は

bool shortNameListResult = shortNameList.Any(shortName => shortName.Length > 4);
bool longNameListResult = longNameList.Any(longName => longName.Length > 4);

この赤文字の箇所です。
このプログラムでは、1つずつの要素に対して、文字列の長さが4以上かどうかを調べていきます。
1つでも条件をクリアするとtrue、全くない場合はfalseが戻ってきます。
今回の場合は

shortNameListResult false
longNameListResult true

とコンソールに表示されています。

 

スポンサーリンク

 

まとめ:Anyメソッドを使ってみよう!

以上がLINQのAnyメソッドの解説です。

配列やリストに対して

  1. 要素があるかどうか
  2. 特定の条件の要素があるかどうか

を調べるときに使ってみてください!

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

ほかにもC#勉強記事を書いてます。
よければご参考ください。

【C#】コンストラクタからコンストラクタを呼ぶ、コンストラクタ初期化子について解説します

【C#】【LINQ】Aggregateメソッドの使い方を解説します

【C#】配列からListに変換するやり方を解説します

 

今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。

【C#】ブログで書いた文法記事のまとめ