VB.NET 配列の仕組みと使い方のサンプル

VB.NETの配列の仕組みと使い方のサンプルです。

確認環境
・Microsoft Visual Studio Community 2019

目次

仕組み 配列とは
作成 配列の宣言と同時に値を設定する(初期化)
  配列の要素の数を宣言して作成する(注意点あり)
取得 配列の値をFor文で取得する
  配列の要素に指定の値があるか確認する(Contains/IndexOf)
変更 配列の値を変更する
  配列のサイズを変更する(ReDimとPreserve)
ソート 配列の値をソートする
コピー 配列をコピーする
変換 配列をリストに変換する
  リストを配列に変換する
使用する メソッドの引数と戻り値が配列
2次元 2次元配列を作成する

配列とは

配列の宣言と同時に値を設定する(初期化)

配列の宣言と同時に値を設定するサンプルです。

Module Module1
    Sub Main()
        Dim a() As String = {"赤", "黄", "青"} '配列
        Console.WriteLine(a(0)) '赤が出力される
        Console.WriteLine(a(1)) '黄が出力される
        Console.WriteLine(a(2)) '青が出力される

        Dim b = {"黒", "灰", "白"} '配列
        Console.WriteLine(b(0)) '黒が出力される
        Console.WriteLine(b(1)) '灰が出力される
        Console.WriteLine(b(2)) '白が出力される

        Dim c() As String = New String() {"A", "B", "C"} '配列
        Console.WriteLine(c(0)) 'Aが出力される
        Console.WriteLine(c(1)) 'Bが出力される
        Console.WriteLine(c(2)) 'Cが出力される
    End Sub
End Module

3行目は、リテラルで配列を作成しています。リテラルとはコード中に記述された値です。
4~6行目は、配列の各値を表示しています。

8行目は、型の指定をしていません。
13行目は、配列の前にNew Stringを使用しています。

配列の要素の数を宣言して作成する(注意点あり)

配列の要素の数を宣言して作成するサンプルです。
値は後から追加します。

Module Module1
    Sub Main()
        Dim a(3) As String '配列
        a(0) = "赤"
        a(1) = "黄"
        a(2) = "青"
        a(3) = "オレンジ"
        'a(4) = "緑" 'インデックスが配列の境界外ですのエラー

        For Each b As String In a
            Console.WriteLine(b) '赤 黄 青 オレンジが出力される
        Next
    End Sub
End Module

3行目は、変数の後のかっこで3を指定しています。
その場合の要素は、4~7行目のようにインデックスは0から3までの4つ入ります
要素の数が3つではないので注意が必要です。
Javaの場合は、3と宣言したら要素の数は3つです。

配列の値をFor文で取得する

配列の値をFor文で取得するサンプルです。

Module Module1
	Sub Main()
		Dim a() As String = {"赤", "黄", "青"} '配列

		For Each b As String In a
			Console.WriteLine(b) '赤 黄 青が出力される
		Next

		For i = 0 To a.Count - 1
			Console.WriteLine(a(i)) '赤 黄 青が出力される
		Next

		For i = 0 To UBound(a)
			Console.WriteLine(a(i)) '赤 黄 青が出力される
		Next
		Console.WriteLine(UBound(a)) '2
	End Sub
End Module

5行目は、For Each文です。インデックスの値を使用せずに配列の各値を表示します。
9行目は、For文です。要素の数をcountで取得しインデックス(i)を使用して配列の各値を表示します。
13行目もFor文です。UBoundで配列のインデックスの最大値(2)を取得しています。

配列の要素に指定の値があるか確認する(Contains/IndexOf)

Public Function Contains (value As String) As Boolean
Public Shared Function IndexOf (array As Array, value As Object) As Integer

配列の要素に指定の値があるか確認するサンプルです。

Module Module1
	Sub Main()
		Dim a() As String = {"赤", "黄", "青"} '配列

		Dim b1 As Boolean = a.Contains("黄")
		Console.WriteLine(b1) 'Trueが出力される

		Dim b2 As Boolean = a.Contains("白")
		Console.WriteLine(b2) 'Falseが出力される

		Dim b3 As Integer = Array.IndexOf(a, "青")
		Console.WriteLine(b3) '2が出力される

		Dim b4 As Integer = Array.IndexOf(a, "緑")
		Console.WriteLine(b4) '-1が出力される
	End Sub
End Module

3行目は、配列です。
5行目は、Containsメソッドで指定の値が存在するか確認しています。
存在する場合はtrueを、存在しない場合はFalseを返します。
11行目は、IndexOfメソッドで指定の値が存在するか確認しています。
存在する場合は位置を、存在しない場合は-1を返します。

配列の値を変更する

配列の値を変更するサンプルです。

Module Module1
    Sub Main()
        Dim a() As String = {"赤", "黄", "青"} '配列

        a(1) = "オレンジ"

        Console.WriteLine(a(0)) '赤が出力される
        Console.WriteLine(a(1)) 'オレンジが出力される
        Console.WriteLine(a(2)) '青が出力される
    End Sub
End Module

5行目は、文字列を配列の変数に代入しています。
インデックス(添字)で変更したい要素を指定します

配列のサイズを変更する(ReDimとPreserve)

配列のサイズを変更するサンプルです。サイズを変更するにはRedimが必要です。

Module Module1
	Sub Main()
		Dim ar1(2) As String '配列
		ar1(0) = "赤"
		ar1(1) = "黄"
		ar1(2) = "青"

		'ar1(3) = "オレンジ" 'インデックスが配列の境界外のエラー

		ReDim Preserve ar1(3)

		ar1(3) = "オレンジ"

		For Each a In ar1
			Console.WriteLine(a) '赤 黄 青 オレンジが出力される
		Next
	End Sub
End Module

3行目は、配列です。
8行目は、配列に値をセットしようとしますが、サイズが足りないことによるエラーが発生します。

10行目は、RedimとPreserveで数値を3にして、サイズを変更しています。
12行目は、値をセットしています。
15行目は、12行目に追加した値が表示されます。

ReDimは、Re + Dimで再宣言という意味です。
Preserveは保持するという意味です。
Preserveがないとそれまでに登録した値がクリアされてしまいます。

配列の値をソートする

Public Shared Sub Sort(Of T)(array() As T)

配列の値をソートするサンプルです。ArrayクラスのSortメソッドを使用します。

Module Module1
	Sub Main()
		' 配列 数値
		Dim a() As Integer = {100, 2, 99} '配列
		Array.Sort(a)
		Console.WriteLine(a(0)) '2が出力される
		Console.WriteLine(a(1)) '99が出力される
		Console.WriteLine(a(2)) '100が出力される

		'配列 文字列
		Dim b() As String = {"da", "abb", "pccc"} '配列
		Array.Sort(b)
		Console.WriteLine(b(0)) 'abbが出力される
		Console.WriteLine(b(1)) 'daが出力される
		Console.WriteLine(b(2)) 'pcccが出力される
	End Sub
End Module

4行目は、数値の配列です。
5行目でソートをしています。
結果は、2,99,100になります。100,2,99にはなりません。
11行目は、文字列の配列です。
12行目でソートをしています。
結果は、先頭の文字のabc順に表示されます。

配列をコピーする

Array.Copy(コピー元配列,開始位置,コピー先配列,開始位置,コピーする要素数)

配列をコピーするサンプルです。

Module Module1
	Sub Main()
		Dim a() As String = {"赤", "黄", "青"} '配列
		Dim b(3) As String

		Array.Copy(a, 0, b, 0, a.Length)

		b(1) = "オレンジ"

		For Each str1 As String In a
			Console.WriteLine(str1) '赤 黄 青が出力される
		Next
		For Each str1 As String In b
			Console.WriteLine(str1) '赤 オレンジ 青が出力される
		Next
	End Sub
End Module

3行目はコピー元の配列で、4行目はコピー先の配列です。
6行目は、ArrayクラスのCopyメソッドで配列をコピーしています。
8行目は、コピー先の配列の値を変更ています。
10~15行目は、コピー先の値は変わりましたが、コピー元の値は変更されていません。

配列をリストに変換する

Public Sub New(collection As IEnumerable(Of T))
Public Sub AddRange(collection As IEnumerable(Of T))

配列をリストに変換するサンプルです。

Module Module1
	Sub Main()
		Dim color1() As String = {"赤", "黄", "青"} '配列
		Dim list1 As New List(Of String)(color1) 'リスト
		For Each a As String In list1
			Console.WriteLine(a) '赤 黄 青が出力される
		Next

		Dim color2() As String = {"緑", "紫", "黒"} '配列
		Dim list2 As New List(Of String) 'リスト
		list2.AddRange(color2)
		For Each a As String In list2
			Console.WriteLine(a) '緑 紫 黒が出力される
		Next
	End Sub
End Module

3行目は、配列です。
4行目は、配列からリストに変換しています。リストのコンストラクタに配列color1を指定しています。
11行目は、AddRangeメソッドで配列をリストに追加しています。

リストを配列に変換する

Public Function ToArray() As T()

リストを配列に変換するサンプルです。

Module Module1
	Sub Main()
		Dim a As New List(Of String)(New String() {"赤", "黄", "青"})

		Dim color1 = a.ToArray()

		ReDim Preserve color1(3)
		color1(3) = "オレンジ"
		For Each c As String In color1
			Console.WriteLine(c) '赤 黄 青 オレンジと出力される
		Next
	End Sub
End Module

3行目は、リストです。
5行目は、ToArrayメソッドでリストを配列にしています。
7行目は、配列の機能であるReDim Preserveを使用して配列であることを確認しています。

メソッドの引数と戻り値が配列

メソッドの引数と戻り値が配列のサンプルです。

Module Module1
    Sub Main()
        Dim colors() As String = {"赤", "黄", "青"} '配列

        Dim c2() = GetColor(colors)

    End Sub

    Private Function GetColor(c1() As String) As String()
        Return c1
    End Function
End Module

8行目は、呼び出し元のメソッドです。引数と戻り値が配列です。
11行目は、定義されたメソッドです。引数と戻り値が配列です。
引数は(C1() As String)で、AS String()が戻り値の型です。

2次元配列を作成する

2次元配列を作成するサンプルです。

Module Module1
    Sub Main()
        Dim a(,) As String = {
            {"赤1", "黄1", "青1"},
            {"赤2", "黄2", "青2"}
        }
        Console.WriteLine(a(0, 0)) '赤1が出力される
        Console.WriteLine(a(0, 1)) '黄1が出力される
        Console.WriteLine(a(0, 2)) '青1が出力される
        Console.WriteLine(a(1, 0)) '赤2が出力される
        Console.WriteLine(a(1, 1)) '黄2が出力される
        Console.WriteLine(a(1, 2)) '青2が出力される
    End Sub
End Module

3行目は、()の中にカンマがあります。
3~6行目は、2次元配列を作成しています。
7~12行目は、2次元配列の値を表示しています。

関連の記事

VB.NET If文のサンプル
VB.NET For文のサンプル(Exit/Continue)
VB.NET While文のサンプル(Exit/Continue)
VB.NET Do...Loop文のサンプル(Exit/Continue)

△上に戻る