VB.NETのリストに要素を含むか検索する3つの方法!

VB.NET VB.NET

VB.NETでリストに要素を含むか検索して、確認する方法について書いています。
リストに要素を含むか確認するときには、下記のメソッドが使えます。

・Containsメソッド
・IndexOfメソッド
・LastIndexOfメソッド

Containsで含むか確認する

リストからContainsメソッドを呼び出すことで、対象のリストに「指定した要素」を含むか確認することができます。
例えば、下記のように使います。

Dim fruits As List(Of String) = New List(Of String)({"apple", "banana", "grape", "cherry", "orange"})

If fruits.Contains("grape") Then
    Console.WriteLine("grapeを含む")
Else
    Console.WriteLine("grapeを含まない")
End If

最初にfruits変数に対して、5つの文字列でリストを作りました。

次の処理で、fruitsリストからContainsメソッドを呼び出しています。
引数として渡しているのは、含んでいるか確認したい要素です。
含んでいるときにはTrueが返ってきて、含まないときにはFalseが返ってきます。

今回は「grape」を渡して、含んでいるのでTrueが返ってきて、Ifの配下の処理が実行されます。
そのため、プログラムを実行すると「grapeを含む」を出力して処理が終わります。

IndexOfで含むか確認する

リストからIndexOfメソッドを呼び出すことでも、対象のリストに「指定した要素」を含んでいるか確認することができます。
IndexOfメソッドは要素のインデックス(要素番号)を返します。

例えば、下記のように使います。

Dim fruits As List(Of String) = New List(Of String)({"apple", "banana", "grape", "cherry", "orange"})
Dim index As Int32 = fruits.IndexOf("cherry")
Console.WriteLine(index) ' 3

If -1 < index Then
    Console.WriteLine("cherryを含む")
Else
    Console.WriteLine("cherryを含まない")
End If

先ほどと同じようにfruits変数に対して、5つの文字列でリストを作っています。

次の処理で、fruitsリストからIndexOfメソッドを呼び出しています。
こちらも引数として渡しているのは、含んでいるか確認したい要素です。
含んでいるときには要素番号が返ってきて、含んでいないときには「-1」が返ってきます。

今回は「cherry」を渡しています。
リストに含んでいるためリストの先頭から数えて「3」が返ってきます。

プログラムを実行すると、下記のように出力されました。
要素番号が返ってきたのと、Ifの配下を通っていることが確認できました。

3
cherryを含む

LastIndexOfで含むか確認する

リストからLastIndexOfメソッドを呼び出すことでも、対象のリストに「指定した要素」を含んでいるか確認することができます。
LastIndexOfメソッドも要素のインデックス(要素番号)を返します。

例えば、下記のように使います。

Dim fruits As List(Of String) = New List(Of String)({"apple", "banana", "grape", "cherry", "orange"})
Dim index As Int32 = fruits.LastIndexOf("banana")
Console.WriteLine(index) ' 1

If -1 < index Then
    Console.WriteLine("bananaを含む")
Else
    Console.WriteLine("bananaを含まない")
End If

基本的にはIndexOfメソッドと同じように動きます。
こちらも同じようにfruits変数に対して、5つの文字列でリストを作っています。

その次の処理で、fruitsリストからLastIndexOfメソッドを呼んでいます。
渡しているのは探したい要素です。
含んでいるときには要素番号が返ってきて、含まないときには「-1」が返ってきます。

プログラムを実行すると、下記のように出力されました。
要素番号の「1」と、Ifの配下を通っていることが確認できました。

1
bananaを含む

IndexOfとLastIndexOfの違い

LastIndexOfメソッドはIndexOfメソッドと同じ挙動に見えますが、重複する要素があるときにIndexOfメソッドとの違いが出てきます。
コードで違いを確認してみます。

Dim fruits As List(Of String) = New List(Of String)({"apple", "banana", "apple", "grape", "apple", "cherry", "orange"})
Dim firstIndex As Int32 = fruits.IndexOf("apple")
Dim lastIndex As Int32 = fruits.LastIndexOf("apple")

Console.WriteLine(firstIndex) ' 0 
Console.WriteLine(lastIndex) ' 4

最初にfruits変数に対して、7つの文字列でリストを作っています。
「”apple”」の要素が3つ重複しています。

fruitsリストからIndexOfとLastIndexOfを呼び出して、返り値を確認してみます。
それぞれfirstIndex変数とlastIndex変数で受け取りました。

IndexOfメソッドでは、最初に要素が見つかった位置が返ってきます。
LastIndexOfメソッドでは、最後に要素が見つかった位置が返ってきます。

そのため、プログラムを実行すると、下記のように出力されました。

0
4

このように重複する要素があるときには、IndexOfとLastIndexOfで動作が変わることが確認できました。

リストに要素を含むか検索する方法まとめ

今回はVB.NETのリストに要素を含むか検索して、確認する方法について書きました。
記事の内容をまとめると、下記のようになります。

メソッド 説明
Contains 渡した要素を含むときにはTrue、含まないときにはFalseが返ってくる fruits.Contains(“grape”)
IndexOf 渡した要素の最初の要素番号を返す、含まないときには「-1」が返ってくる fruits.IndexOf(“grape”)
LastIndexOf 渡した要素の最後の要素番号を返す、含まないときには「-1」が返ってくる fruits.LastIndexOf(“grape”)

基本的に含むか確認するときにはContainsメソッドを使うと良いかと思います。
要素が含まれる位置を確認したいときに、IndexOfまたはLastIndexOfを使っていくと良さそうです。

コメント

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