C#で配列に指定した値が含まれているか確認する方法について書いています。
下記のメソッドを使って、判定することができます。
・Array.IndexOf
・Array.Exists
載せているコードについては、.Netのバージョン6(C#のバージョン10)で確認しました。
Containsメソッドで含まれるか確認する
LINQのContainsメソッドを使うことで、指定した要素が含まれるか確認することが可能です。
Containsメソッドについては、公式のこちらに記載がありました。
例えば、下記のように使います。
var fruits = new string[5] {"orange", "grape", "peach", "apple", "banana"};
var result = fruits.Contains("peach");
if (result) {
Console.WriteLine("peachを含んでいます");
}
5つの文字列の要素のfruits配列を作りました。
その次の処理で、fruits配列からContainsメソッドを呼んでいます。
引数として渡しているのは、探したい要素です。
渡した要素があれば、Trueが返ってきて、ない場合にはFalseが返ってきます。
今回は「peach」を渡しています。
配列に含まれるので、Trueが返ってきて、if文を通ります。
結果「peachを含んでいます」を出力して、処理が終わります。
IndexOfメソッドで含まれるか確認する
Array.IndexOfメソッドを使うことでも、含まれるか確認することが可能です。
Array.IndexOfメソッドについては、公式のこちらに記載がありました。
例えば、下記のように使います。
var fruits = new string[5] {"orange", "grape", "peach", "apple", "banana"};
var result = Array.IndexOf(fruits, "grape");
if (result != -1) {
Console.WriteLine("grapeを含んでいます");
}
先ほどと同じように文字列のfruits配列を用意しました。
その次の処理で、Array.IndexOfメソッドを使っています。
メソッドに渡しているのは、下記の2つになります。
・第2引数:探したい要素
今回の場合だと、fruits配列から「grape」を探します。
探した結果、見つかった場合には配列の要素番号が返ってきます。
見つからなかった場合には「-1」が返ってきます。
if文で「-1」じゃない場合は、と書いているので、これで見つかった場合はif文を通ります。
「grape」はfruits配列の1番目なので、1が返ってきて、結果「grapeを含んでいます」が出力されて処理が終了します。
Existsメソッドを含まれるか確認する
Array.Existsメソッドを使うことでも、含まれるか確認することが可能です。
Array.Existsメソッドについては、公式のこちらに記載がありました。
例えば、下記のように使います。
var fruits = new string[5] {"orange", "grape", "peach", "apple", "banana"};
var result = Array.Exists(fruits, fruit => fruit == "banana" );
if (result) {
Console.WriteLine("bananaを含んでいます");
}
先ほどと同じように文字列のfruits配列を用意しました。
次の処理で、Array.Existsを使っています。
メソッドに渡しているのは、下記の2つになります。
・第2引数:検索条件を定義する
今回は、fruits配列を検索する対象にしています。
第2引数にはラムダ式を使って、条件を書いています。
ラムダ式のfruit変数に配列の値が展開されるので、値と文字列の「banana」を比べています。
そうすると、配列の要素として存在するので、result変数にはTrueが返ってきます。
結果、if文の中を通って「bananaを含んでいます」が出力されて、処理が終わります。
イコール以外の条件を設定する
Array.Existsメソッドを使った場合には、単純に値が同じという条件以外を設定することができます。
これは第2引数に検索条件を書けるためです。
例えば、文字列の先頭を指定したり、末尾の指定することが可能です。
下記では、文字列の先頭に「a」を含む要素があるかを判定しています。
var fruits = new string[5] {"orange", "grape", "peach", "apple", "banana"};
var result = Array.Exists(fruits, fruit => fruit.StartsWith("a") );
if (result) {
Console.WriteLine("先頭がaの文字列があります");
}
先ほどのプログラムを少し修正しました。
Array.Existsメソッドを使ったときの条件を変えています。
文字列のfruit変数からStartsWithメソッドを呼んで、先頭が「a」になっているか確認しています。
こうすることで、fruits配列の中に先頭が「a」から始まっている要素がある場合は、Trueが返ってきます。
今回の場合は、「apple」が先頭「a」から始まっているので、result変数にはTrueが返ってきます。
結果、「先頭がaの文字列があります」を出力して、処理が終わります。
終わりに
今回はC#の配列に、指定した要素が含まれるか検索する方法について書きました。
一番簡単に確認できるのが、Containsメソッドかと思います。
配列の要素番号が取りたい場合には、Array.IndexOfメソッドを使うと良さそうです。
イコール以外の検索する条件を使いたい場合には、Array.Existsメソッドを使うと良さそうでした。
コメント