VB.NETの配列に値が含まれるか検索して確認する3つの方法!

VB.NET VB.NET

VB.NETで配列に指定した値が含まれているか確認する方法について書いています。
下記のメソッドを使って、判定することができます。

・Contains(LINQ)
・Array.IndexOf
・Array.Exists

Containsメソッドで含まれるか確認する

配列からContainsメソッドを呼び出すことで、配列の中に値が含まれているか確認することができます。
Containsメソッドについては、公式のこちらに記載があります。

例えば、下記のように使うことができます。

Dim fruits() As String = New String() {"apple", "grape", "orange"}

Dim result = fruits.Contains("grape")
If result Then
    Console.WriteLine("grapeを含んでいます")
End If

fruits変数に対して、文字列の要素を3つ入れて配列を作成しました。

次の処理で、fruits配列からContainsメソッドを呼び出しています。
Containsメソッドに渡しているのは、配列に含まれているか確認したい値です。
渡した値が配列に含まれている場合はTrueが返ってきて、含まれていない場合にはFalseが返ってきます。

今回渡した「grape」は含まれているので、Trueが返ってきてresult変数に設定されます。

if文で判定していますが、Trueなので「grapeを含んでいます」を出力して処理が終わります。
このようにContainsメソッドを使って、含まれているか判定することができます。

IndexOfメソッドで含まれるか確認する

ArrayクラスからIndexOfメソッドを呼び出して、配列と値を渡すことでも含まれるか確認することができます。
IndexOfメソッドを使うと、渡した値の位置を返してくれます。

Array.IndexOfメソッドについては、公式のこちらに記載があります。

Dim fruits() As String = New String() {"apple", "grape", "orange"}

Dim result = Array.IndexOf(fruits, "orange")
If result <> -1 Then
    Console.WriteLine("orangeを含んでいます")
End If

最初に先ほどと同じように、fruits配列を3つの要素をいれて用意しました。

次の処理で、ArrayクラスからIndexOfメソッドを呼び出しています。
第1引数に渡しているのが配列で、第2引数に渡しているのが探したい値です。

返り値として、含まれている場合には「0」から数えた値の位置が返ってきます。
含まれていない場合には「-1」が返ってきます。

今回渡した「orange」は配列に含まれているので、値が入っている場所の「2」が返ってきます。

「-1」が返ってきていなければ含まれるので、result変数が「-1」でないかを確認しています。
結果、「orangeを含んでいます」を出力して処理が終わります。

Existsメソッドを含まれるか確認する

ArrayクラスからExistsメソッドを呼び出して、配列と判定するための関数を書くことで、含まれるか判定することができます。

Array.Existsメソッドについては、公式のこちらに記載があります。

Dim fruits() As String = New String() {"apple", "grape", "orange"}

Dim result = Array.Exists(fruits, Function(value)
                                    Return value = "grape"
                                  End Function)

If result Then
    Console.WriteLine("grapeを含んでいます")
End If

先ほどと同じように、fruits配列を3つの要素をいれて用意しています。

次の処理で、ArrayクラスのExistsメソッドを呼び出しました。
第1引数に渡しているのが配列で、第2引数に渡しているのが判定するための関数です。
判定する関数のvalueの箇所には、配列の値がひとつずつ入ってきて、含まれるか評価されます。

含まれている場合にはTrueが返ってきて、含まれない場合にはFalseになります。

今回は「grape」が含まれるので、Trueになります。
そのため「grapeを含んでいます」が出力されて処理が終わります。

イコール以外の処理が書ける

Existsメソッドを使うと、第2引数が関数なので、値がイコール以外の処理を書くことができます。
例えば、下記のように処理できます。

Dim fruits() As String = New String() {"apple", "grape", "orange"}

Dim result = Array.Exists(fruits, Function(value)
                                    Return value.startsWith("g")
                                  End Function)

If result Then
    Console.WriteLine("先頭文字gの値を含んでいます")
End If

先ほどのプログラムの判定関数の箇所を少し修正しました。
startsWithメソッドを使って、先頭文字が渡した「g」か調べています。

これで配列に、先頭文字が「g」の値が含まれていれば、Trueが返ってきます。
今回は含まれているので「先頭文字gの値を含んでいます」が出力されて処理が終わります。

このように同じ値のとき以外の判定を書くことができます。

配列に値が含まれるか検索して確認する方法まとめ

今回はVB.NETで配列に値が含まれるか検索して確認する方法について書きました。
記事の内容をまとめると、下記のようになります。

・Containsメソッドを使うと、渡した内容と同じか確認することができる。(同じならTrue、違うならFalse)
・Array.IndexOfメソッドを使うと、値の位置を返してくれた。(値がない場合には0になった)
・Array.Existsメソッドを使うと、値に対する判定を書いて含まれるか調べることができた。

基本的にはContainsメソッドを使うと良いでしょう。
配列の位置がほしいときにはArray.IndexOfメソッドを使い、判定条件を変えたいときにはArray.Existsメソッドを使うと良さそうです。

コメント

タイトルとURLをコピーしました