こんにちは。たいら(@tairaengineer2)です。
この記事では、C#のLINQでAnyメソッドについて解説します。
スポンサーリンク
前提条件
この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。
Anyメソッドとは
リストや配列に対して、
- 要素があるかどうか
- 特定の条件の要素があるかどうか
を調べるときに使います。
引数の数によって処理内容が異なります。
引数なし | Any<TSource>(IEnumerable<TSource>) | シーケンスに要素が含まれているかどうかを判断します。 |
---|---|---|
引数が1つ | Any<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) | シーケンスの任意の要素が条件を満たしているかどうかを判断します。 |
Enumerable.Any Method (System.Linq) | Microsoft Docsから引用させて頂きました
usingは
using System.Linq;
を使います。
どういう風に使っているのかを見た方が理解が早いと思うので、実際にAnyメソッドを使ってみます。
解説に使うC#プログラム
解説では
- Anyメソッドに引数が無い場合
- Anyメソッドに引数がある場合
2種類のプログラムを作ります。
どちらもAnyメソッドを使った結果をコンソールに表示させます。
コンソールプロジェクトを作成するやり方は下の記事をご参考ください。
プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。
解説その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);
}
}
}
実行結果
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);
}
}
}
実行結果
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メソッドの解説です。
配列やリストに対して
- 要素があるかどうか
- 特定の条件の要素があるかどうか
を調べるときに使ってみてください!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
ほかにもC#勉強記事を書いてます。
よければご参考ください。
【C#】コンストラクタからコンストラクタを呼ぶ、コンストラクタ初期化子について解説します
【C#】【LINQ】Aggregateメソッドの使い方を解説します
今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。