今回のテーマ
こんばんは、サルモリです。
今回は下記の記事の続きです。
CHECK
-
【C# sharp Linq】Selectメソッド、Whereメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 C#言語のL ...
続きを見る
今回のテーマ
Linqのメソッド、AnyメソッドとAllメソッドについて解説します。
今回の記事ではLinqのAnyメソッドとAllメソッドについて書いていきます。比較的使用する頻度は多いので、是非記事を読んで覚えてくださいね!!
他のLinqの記事についてはこちら
LinqのAnyとAllを使用する場面
Any
要素の値が1つ以上指定した値の場合はtrueを返します。1つもなかったらfalseを返します。if文の中で使用することが多いです。
All
要素の値が全て指定した値の場合はtrueを返します。1つでも違う値だった場合はfalseを返します。if文の中で使用することが多いです。
Linqメソッドの解説の流れ
下記の流れで説明したいと思います。
行いたい処理の例を書きます。
Linqを使用しない書き方と使用する書き方のソースコードを書いていきます。
ソースコードには、配列を使います。
Anyの使い方
まずはAnyメソッドの使い方について、例を書いていきます。
行いたい処理
配列の要素の中で一つでも3がある場合は「3が含まれています。」と出力したい。
Linqを使用しない例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array = new int[] { 1, 2, 3, 4, 5 ,6}; foreach(var item in array) { if(item == 3) { Console.WriteLine("3が含まれています"); } } } } } |
result
3が含まれています。
配列の要素分繰り返しを行い、3が一致した場合はテキストを出力します。
続けてLinqを使用した例です。
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array = new int[] { 1, 2, 3, 4, 5 ,6}; if(array.Any(n => n == 3)){ Console.WriteLine("3が含まれています。"); } } } } |
result
3が含まれています。
ココがポイント
if文の中の処理がLinqですね。Anyではbool型を返すので、基本的にif文で使用する場面が多いでしょう。
Anyメソッドのみでtrueかfalseを判定できているので、1文で済んでいます。
前回説明しておりませんでしたが、nはあくまでも引数と考えて頂ければいいので、n以外の文字列でも大丈夫です。
Linqを使用すると、1行で書けてしまいますが、実際の処理は、引数nに1、2、3、4、5、6のそれぞれの要素を代入し、3と一致してるよね?と1つずつ確認しています。
念のため、配列に3を含まない場合の処理結果も見てみましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array = new int[] { 1, 2, 4, 5, 6 }; if (array.Any(n => n == 3)) { Console.WriteLine("3が含まれています。"); } else { Console.WriteLine("3が含まれていません。"); } } } } |
result
3が含まれていません。
3が含まれていないので、falseを正しく返していますね!!
Allの使い方
続けてAllメソッドの使い方の例を見てみましょう。
行いたい処理
配列の要素の中が全て3の場合は「全ての要素が3です。」と出力したい。
Linqを使用しない例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array = new int[] { 3, 3, 3, 3}; bool flg3 = true; foreach (var item in array) { if(item == 3) { flg3 = true; } else { flg3 = false; break; } } if (flg3) { Console.WriteLine("全ての要素が3です。"); } } } } |
result
全ての要素が3です。
Linqを使わないで作ろうとすると中々行数がありますね。 😐
このような処理は必要となる頻度が高いので、複数あると可読性も低くなり大変です。
次はLinqを使った例をみてみましょう。
Linqを使用する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { int[] array = new int[] { 3, 3, 3, 3}; bool flg3 = true; if (array.All(n => n == 3)) { Console.WriteLine("全ての要素が3です。"); } } } } |
result
全ての要素が3です。
繰り返し文が排除され、1行で判定文を作ることが出来ています。とても便利ですよね。
念のため、全ての要素が3ではない場合もみてみましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.Linq; class Program { static void Main(string[] args) { int[] array = new int[] { 3, 3, 2, 3 }; bool flg3 = true; if (array.All(n => n == 3)) { Console.WriteLine("全ての要素が3です。"); } else { Console.WriteLine("全ての要素が3ではありません。"); } } } |
result
全ての要素が3ではありません。
全てが3ではないので、正しくfalseを返していますね 😳
他のLinqの記事についてはこちら
データバリデーションの例
ソースコード例: データバリデーション
1 2 3 4 5 6 7 8 9 |
using System; using System.Linq; class Program { static void Main() { string[] names = { "Alice", "Bob", "Charlie", "David" }; bool isValid = names.All(name => name.Length >= 3) && names.Any(name => name.StartsWith("A")); Console.WriteLine("すべての名前が3文字以上で、少なくとも1つはAで始まる名前があるか: " + isValid); } } |
出力結果
すべての名前が3文字以上で、少なくとも1つはAで始まる名前があるか: True
まとめ
今回の記事では下記の二つのメソッドを取り上げたので覚えてくださいね。
今回のメソッド一覧
- Any
- All
ココがポイント
Linqの素晴らしさについてもう一つ記述しておくと、ソースコードを見れば何をしているか分かることです。
今回の場合、Linqの「All」という単語をみれば、全ての要素を判定するんだなー!となんとなくイメージが湧きます。
それに対し、Linqを使用しないソースコードだと繰り返しで何をしているのか処理を1行ずつ追わないといけません。
このように、Linqは可読性の高さもとても優秀なのです!
繰り返し文で出来る処理に対して、Linqを使用すると良いことずくめなので、どんどん覚えて頂ければと思います。
今回の記事は以上とします。他メソッドについても別記事で沢山紹介していきますね。
最後まで見て頂きありがとうございました。
次回の記事です。
CHECK
-
【C# sharp Linq】Avarageメソッド、Maxメソッド、Minメソッド、Sumメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他のLinqの記事についてはこちら
Linqの演習問題はこちら
他の演習問題はこちら