【VB.NET】配列について

VB.NET
この記事は約8分で読めます。

配列について

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. 指定された値が複数存在する場合、最初にヒットした要素番号を戻します。
  3. 指定された値が存在しない場合、「-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

コメント

タイトルとURLをコピーしました