VB.NET 配列 検索とソート(並び替え)

配列内に指定された文字列や数値があるか検索する方法と
配列内のデータをソートする方法をご紹介します。

配列内の検索(文字列)

配列内に指定された文字列があるかどうか検索する方法です。

Dim fruit() As String = {"りんご", "みかん", "いちご"}

Dim i As Integer
i = Array.IndexOf(fruit, "りんご")
Console.WriteLine("「りんご」のインデックスは{0}です", i)

i = Array.IndexOf(fruit, "バナナ")
If i = -1 Then
    Console.WriteLine("「バナナ」は見つかりませんでした")
End If
「りんご」のインデックスは0です
「バナナ」は見つかりませんでした

配列の中を検索するには、Array.IndexOfメソッドを使います。
第1引数に配列を指定
第2引数に検索するキーワードを指定します。

見つかれば、見つかった位置のインデックス番号が返ります。
配列は0から数えるので、この例の場合は0が返ります。

もし、見つからなかった場合は、-1が返ります。

配列内の検索(数値)と検索範囲指定

配列内に指定された数値があるかどうか検索する方法です。

Dim num() As Integer = {50, 20, 100, 60, 20, 70}

Dim i As Integer
i = Array.IndexOf(num, 20)
Console.WriteLine("「20」のインデックスは{0}です", i)

'配列の最後から検索
i = Array.LastIndexOf(num, 20)
Console.WriteLine("「20」のインデックスは{0}です", i)

'文字列で検索
i = Array.IndexOf(num, "20")
If i = -1 Then
    Console.WriteLine("""20""は見つかりませんでした")
End If

'インデックス番号3から最後まで検索
i = Array.IndexOf(num, 20, 3)
Console.WriteLine("「20」のインデックスは{0}です", i)

'インデックス番号3から3要素分を検索
i = Array.IndexOf(num, 20, 3, 3)
Console.WriteLine("「20」のインデックスは{0}です", i)
「20」のインデックスは1です
「20」のインデックスは4です
"20"は見つかりませんでした
「20」のインデックスは4です
「20」のインデックスは4です

今度は数値の検索です。
同じくArray.IndexOfメソッドを使い、20の数値を検索します。
インデックス1の位置に20があるので、
インデックス番号として1が返ります。

配列の最後にも20のデータがありますが、
一番はじめに見つかったデータのインデックス番号を返します。

配列の最後から検索したい場合は、LastIndexOfメソッドを使います。
今度は最後から検索するので、インデックス番号として4が返ります。

今回扱っているのは、数値の配列データですが、
“20”と言う文字列データで検索しようとすると、
正常に検索できず、-1が返ります。

検索範囲を指定したい場合は、
IndexOfメソッドの第3引数と第4引数に指定します。

第3引数に、検索開始ポイント(配列のインデックス番号)
第4引数に、検索する数を指定します。

スポンサーリンク

配列内のソート(昇順、降順)

Dim num() As Integer = {50, 20, 100, 60, 20, 70}

'昇順にソート
Array.Sort(num)

For Each d As Integer In num
    Console.Write(d.ToString() & " ")
Next
Console.WriteLine()

'降順にソート
Array.Reverse(num)

For Each d As Integer In num
    Console.Write(d.ToString() & " ")
Next
20 20 50 60 70 100
100 70 60 50 20 20

配列をソートするには、Array.Sortメソッドを使います。
引数に配列を指定します。

並び替え(ソート)した事によって、順番が入れ替わりました。
Array.Sort() と書くと、昇順で並べ替えを行います。

対して、降順で並び替えするには、Array.Reverseメソッドを使います。

しかし、
Reverseメソッドは、降順に並べ替えるメソッドではありません。

逆順に並び替えるメソッドです。

降順と逆順で何が違うかと言うと、
降順は数値の大きい順に並べ替えるのに対して、
逆順は、単に配列の終わりの項目から
先頭に向かって並び替えると言う意味になります。

ですから、Sortメソッドを呼ばずにいきなりReverseメソッドを使うと、
降順にならず、期待した結果が得られません。

まとめとして、降順で並び替えたい場合は、
まずSortメソッドで昇順に並び替えてから、
Reverseメソッドを使用する必要があります。


これで配列の検索とソート(並び替え)ができるようになりました。