配列について
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
コメント