ヘッダー

VB.NET 2002, VB.NET 2003, VB2005

配列の検索

1.値が最初に見つかった位置を取得する例

以下の例では配列を先頭から調べて、最初に値が 6 である要素のインデックスを取得する。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {2, 4, 4, 7, 6, 10, 6, 2}
Dim Position As
Integer

Position = Array.IndexOf(i1, 6)

この例では変数Positionの値は 4 になる。

なお、IndexOfメソッドは値が見つからなかった場合は -1 を返す。

 

2.指定の範囲内で値が最初に見つかった位置を取得する例

以下の例では5番目のインデックスから、3つの要素を調べて、最初に値が 6 である要素のインデックスを取得する。(インデックスが 0 からはじめることに注意)。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {2, 4, 4, 7, 6, 10, 6, 2}
Dim Position As
Integer

Position = Array.IndexOf(i1, 6, 5, 3)

この例では変数Positionの値は 6 になる。

なお、IndexOfメソッドは値が見つからなかった場合は -1 を返す。

 

.値が最後に見つかった位置を取得する例

以下の例では配列を後ろから調べて、最初に値が 6 である要素のインデックスを取得する。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {2, 4, 4, 7, 6, 10, 6, 2}
Dim Position As
Integer

Position = Array.LastIndexOf(i1, 6)

この例では変数Positionの値は 6 になる。値を検索する範囲を指定することも可能。

なお、LastIndexOfメソッドは値が見つからなかった場合は -1 を返す。

 

4.昇順に並んでいる配列から値が見つかった位置を取得する例

以下の例では配列を先頭から調べて、最初に値が 6 である要素のインデックスを取得するように命令する。ただしこの場合、配列は昇順に並んでいることが前提になっているので、値が7である要素を発見した時点で検索は中断される。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {2, 4, 4, 7, 6, 10, 6, 2}
Dim Position As
Integer

Position = Array.BinarySearch(i1, 6)

MsgBox(Position) '-4と表示される。

MsgBox(Not Position) '3と表示される。

この例では変数Positionの値は -4 になる。 値が負の場合は要素が見つからなかったことを示している。

この値の補数を調べると、検索を中断したインデックスを調べることができる。この例では3番目のインデックスで検索が中断されるので3を得る。

検索が末尾まで達したのに値が見つからなかった場合は、最後の要素のインデックス + 1 の補数を取得する。

なお、BinarySearchメソッドでは独自の並び順や比較方法を使って検索を行うことができる。その場合にはSystem.Collections.IComparerを実装するクラスを自作してオーバーロードの引数に渡す。これを使って、たとえば、"六"と"6"を同一視させるなどのことが可能。

 


VB6対応 VB6ではできません。ループを使うなどして自分で値を検索する必要があります。