配列について
VB.NETの配列の使い方について説明します。
用語説明
配列の説明で必要な用語の知識です。
配列 | 複数の値を保持する箱 |
要素 | 配列に入っている値 |
要素数 | 配列に入っている値の数 |
要素番号 | 配列に入っている値が何番目なのか示す番号 |
インデックス | 要素番号と同じ意味 |
宣言・初期化
宣言・初期化の方法は以下の通り。用途によって使い分けます。
'1.配列の宣言のみ
'要素数と値は後で設定する
Dim 配列変数名() As 型名
'2.配列の宣言 + 要素数の指定
'値は後で設定する
Dim 配列変数名(要素数) As 型名
'3.配列の宣言 + 初期値の設定
'(初期値を設定すると暗黙的に要素数も確定する)
Dim 配列変数名() As 型名 = {値1 , 値2 , . . . , 値n }
'おまけ 配列の宣言 + 初期値の設定 の色々
Dim a() As String = {"あ", "い", "う"}
Dim b = {"1", "2", "3"}
Dim c() As String = New String() {"A", "B", "C"}
要素数の確認
配列にいくつ要素が入っているのかを確認するには、『Length』プロパティで確認できます。
配列名.Length
要素数の変更
要素数を変更したい場合、方法は2種類あります。
'1.値を保持しない
ReDim 配列変数名(変更する要素数)
'2.値を保持する
ReDim Preserve 配列変数名(変更する要素数)
『ReDim』で 再宣言しますが、『Preserve』を付けることで、値を保持します。Preserveは、英語で『保存する』という意味です。
サンプルコード
Module Module1
Sub Main()
'配列の宣言 + 初期値セット
Dim arr() As Integer = {1, 2, 3}
'配列の要素番号0の値を出力
Console.WriteLine("変更前の要素番号0の値:" & arr(0))
'出力:変更前の要素番号0の値:1
'配列の要素数変更
ReDim Preserve arr(3)
'配列の要素番号0の値を出力
Console.WriteLine("変更後の要素番号0の値:" & arr(0))
' 出力:変更後の要素番号0の値:1
'配列の要素数変更
ReDim arr(3)
'配列の要素番号0の値を出力
Console.WriteLine("変更後の要素番号0の値:" & arr(0))
' 出力:変更後の要素番号0の値:0
End Sub
End Module
値の取得と変更
配列に要素番号を指定します。ポイントは、要素番号は0から始まることです。
また、範囲外の要素番号をしていすると『IndexOutOfRangeException』エラーが発生します。
サンプルコード
Module Module1
Sub Main()
'配列の宣言 + 初期値セット
Dim arr() As Integer = {1, 2, 3}
Console.WriteLine("要素番号0の値:" & arr(0))
'出力:要素番号0の値:1
Console.WriteLine("変更前の要素番号1の値:" & arr(1))
'出力:要素番号1の値:2
Console.WriteLine("変更前の要素番号2の値:" & arr(2))
'出力:要素番号2の値:3
Try
Console.WriteLine("変更前の要素番号3の値:" & arr(3))
'エラー発生
Catch ex As System.IndexOutOfRangeException
Console.WriteLine(ex.ToString)
'System.IndexOutOfRangeException: インデックスが配列の境界外です。
End Try
End Sub
End Module
For文で全ての要素を取得することも可能です。
要素番号は「0」から始まるため要素数を「-1」しているのがポイントです。
Module Module1
Sub Main()
'配列の宣言 + 初期値セット
Dim arr() As Integer = {1, 2, 3}
For Each it As Integer In arr
Console.WriteLine(it)
Next
For i As Integer = 0 To arr.Length - 1
Console.WriteLine(arr(i))
Next
For i As Integer = 0 To arr.Length
Console.WriteLine(arr(i))
' IndexOutOfRangeException 発生
Next
End Sub
End Module
値を変更する場合は「配列(要素番号)=変更する値」でOKです。
サンプルコード
Module Module1
Sub Main()
'配列の宣言 + 初期値セット
Dim arr() As Integer = {1, 2, 3}
Console.WriteLine("変更前の要素番号0の値:" & arr(0))
'出力:変更前の要素番号0の値:0
arr(0) = 999
Console.WriteLine("変更後の要素番号0の値:" & arr(0))
'出力:変更後の要素番号0の値:999
End Sub
End Module
配列のソート
'ソート実行(昇順)
Array.Sort(配列)
'ソート実行(降順)
Array.Reverse(配列)
配列内の値の検索
配列内に指定の値があるか検索します。
Array.IndexOf(配列, キーワード)
サンプルコード
Module Module1
Sub Main()
'配列の宣言 + 初期値セット
Dim arr() As Integer = {2, 1, 3, 1}
Console.WriteLine(Array.IndexOf(arr, 2))
'出力:0
Console.WriteLine(Array.IndexOf(arr, 1))
'出力:1
Console.WriteLine(Array.IndexOf(arr, 4))
'出力:-1
End Sub
End Module
- 指定された値が存在する場合、該当の要素番号を戻します。
- 指定された値が複数存在する場合、最初にヒットした要素番号を戻します。
- 指定された値が存在しない場合、「-1」を戻します。
2次元配列
2次元配列とは、配列が配列を持っている状態です。要素を取得する際には要素番号を2つ指定してあげます。
2次元配列(要素番号,要素番号)
「Length」プロパティで要素数を確認すると全次元の全要素数を戻します。
2次元配列.Length
次元ごとの要素数を取得する場合
「GetLength(要素番号)」メソッドを使用します。
2次元配列.GetLength(要素番号)
また、何次元なのかは「Rank」プロパティで確認できます。
2次元配列.Rank
サンプルコード
Module Module1
Sub Main()
' 2次元配列の宣言
Dim arr1(1, 1) As Integer
' 初期値セット
arr1(0, 0) = 1
arr1(0, 1) = 2
arr1(1, 0) = 11
arr1(1, 1) = 12
' arr1の要素の取得
For Each it As Integer In arr1
Console.WriteLine(it)
Next
End Sub
End Module
Module Module1
Sub Main()
' 2次元配列の宣言 + 初期値セット
Dim arr2(,) As Integer =
{
{1, 2},
{11, 12}
}
' arr2の要素の取得
Dim n As Integer = arr2.Rank - 1
For i = 0 To n
For j = 0 To arr2.GetLength(i) - 1
Console.WriteLine(arr2(i, j))
Next
Next
End Sub
End Module
コメント