VB.NETでリストに要素を含むか検索して、確認する方法について書いています。
リストに要素を含むか確認するときには、下記のメソッドが使えます。
・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を使っていくと良さそうです。
コメント