(1) C#で配列に特定の値があるか?をチェックする方法
(1-1) 方法①:ListクラスのContainsメソッドを使う方法
(1-1-1) 構文
(1-1-2) サンプルプログラム
(1-2) 方法②:LINQを使う方法
(1-2-1) 構文
(1-2-2) サンプルプログラム
(1) C#で配列に特定の値があるか?をチェックする方法
配列の中から特定の値があるかをチェックする、いわゆる「探索」のアルゴリズムについてご紹介します。やり方はいくつかありますが、今回は2つの方法をご紹介します。
(1-1) 方法①:ListクラスのContainsメソッドを使う方法
1つ目の方法はListクラスのContainsメソッドを使う方法です。
(1-1-1) 構文
(構文)
[List型].Contains([探したい値])
(構文説明)
まず[List型]の変数について、次のようなList型で定義した変数を指します。
//int型の例 List<int> ls = new List<int>(); //String型の例 List<string> ls = new List<string>();
そしてリスト型のオブジェクトの「Contains()」メソッドで、目的の値があるかどうかをチェックします。結果はboolean型で返ってくるので、if文の条件に入れる事でTrueの場合、つまり[探したい値]がある場合の処理を記述します(↓)。
if ([List型].Contains([探したい値])) { [存在する場合の処理]; }
単一の値の探索であればこの方法で十分と思いますが、もしも複数の値の探索で条件も複雑になってくる場合は、後述するLINQのやり方をオススメします。
(1-1-2) サンプルプログラム
1つ目の方法「ListクラスのContainsメソッドを使う方法」のサンプルプログラムです。
(サンプルプログラム)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SampleProgram { class Program { static void Main(string[] args) { //### <int型の例> int[] values = { 2017, 2019, 2021}; //事前データ仕込み intCheck(values); //チェック実行 } static void intCheck(int[] val) { //### 引数で受け取った配列を、List<int?>型の配列に順番に追加 List<int?> ls = new List<int?>(); for (int i = 0; i < val.Length; i++) { ls.Add(val[i]); } //### 特定の値があるか?のチェック if (ls.Contains(2017)) { Console.WriteLine("Int Check = 2017 exist !!!"); } if (ls.Contains(2018)) { Console.WriteLine("Int Check = 2018 exist !!!"); } if (ls.Contains(2019)) { Console.WriteLine("Int Check = 2019 exist !!!"); } if (ls.Contains(2020)) { Console.WriteLine("Int Check = 2020 exist !!!"); } if (ls.Contains(2021)) { Console.WriteLine("Int Check = 2021 exist !!!"); } } } }
(実行結果)
(1-2) 方法②:LINQを使う方法
LINQはC#等でSQLのようなクエリを実行できる技術です。これを用いて配列から特定の値を探すクエリを実行します。
(1-2-1) 構文
LINQはプログラムからSQLを実行する時と同じ要領で記述できて、ざっくり「クエリを変数で定義」⇒「クエリ実行&結果抽出」のステップになります。
(前半構文:クエリ定義)
まず[クエリ変数名]は「var型」で定義しており、様々な型が入り交じるケースに備えています。イコール以降はSQL文のように配列に対して実行するクエリを定義しています。
var [クエリ変数名] = from [取得値の変数名] in [配列] where [取得値の変数名].Contains('[探索する文字]') select [取得値の変数名];
(後半構文:クエリ実行)
foreachでクエリ結果の配列を順番にループして、値を[ループ取得値の変数名]に格納します。その各値について処理を行えます。
foreach (var [ループ取得値の変数名] in [クエリ変数名]) [何かの処理]
(1-2-2) サンプルプログラム
2つ目の方法である「LINQを使う方法」のサンプルプログラムをご紹介します。
(サンプルプログラム)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SampleProgram { class Program { static void Main(string[] args) { //探索対象の配列を定義 string[] big4_names = { "Roger Federer", "Rafael Nadal", "Novak Djokovic", "Andy Murray" }; //探索のクエリを定義 var myLinqQuery = from name in big4_names where name.Contains('e') select name; //クエリの実行 foreach (var name in myLinqQuery) Console.WriteLine(name + " "); } } }
(実行結果)