Imports System
Class Sample
Shared Sub Print(ByVal arr As Array)
Console.WriteLine("次元: {0}", arr.Rank)
Console.Write("長さ: ")
For d As Integer = 0 To arr.Rank - 1
If 0 < d Then
Console.Write("×{0}", arr.GetLength(d))
Else
Console.Write("{0}", arr.GetLength(d))
End If
Next
Console.WriteLine()
Console.WriteLine("要素数: {0}", arr.Length)
Console.Write("要素: ")
' 取得したい要素のインデックスを指定するための配列
Dim indices(arr.Rank - 1) As Integer
Do
' [step1] step3でインデックスをインクリメントした結果、各次元の長さに達したかどうか調べる
For d As Integer = arr.Rank - 1 To 0 Step -1
If arr.GetLength(d) <= indices(d) Then
' d次元目のインデックスがd次元目の長さを越えている場合
If d = 0 Then
' 1次元目(d = 0)の場合は、インクリメントした結果が1次元目の長さに達しているので終了する
Console.WriteLine()
Return
Else
' d次元目のインデックスを0に戻し、一つ低い次元(d - 1次元)のインデックスをインクリメントする
indices(d) = 0
indices(d - 1) += 1
End if
End If
Next
' [step2] 指定されたインデックスの要素を取得して表示
Console.Write("{0}, ", arr.GetValue(indices))
' [step3] もっとも高い次元のインデックスをインクリメント
indices(arr.Rank - 1) += 1
Loop
End Sub
Shared Sub Main()
' 5個の要素を持つ1次元配列
Dim arr As Integer() = { _
0, 1, 2, 3, 4 _
}
Print(arr)
Console.WriteLine()
' 3×4個の要素を持つ2次元配列
Dim matrix As Integer(,) = { _
{0, 1, 2, 3}, _
{4, 5, 6, 7}, _
{8, 9, 10, 11} _
}
Print(matrix)
Console.WriteLine()
' 4×2×3個の要素を持つ3次元配列
Dim cube As Integer(,,) = { _
{ { 0, 1, 2}, { 3, 4, 5} }, _
{ { 6, 7, 8}, { 9, 10, 11} }, _
{ {12, 13, 14}, {15, 16, 17} }, _
{ {18, 19, 20}, {21, 22, 23} } _
}
Print(cube)
Console.WriteLine()
' 2×2×2×2個の要素を持つ4次元配列
Dim tesseract As Integer(,,,) = { _
{ { {0, 1}, { 2, 3} }, { { 4, 5}, { 6, 7} } }, _
{ { {8, 9}, {10, 11} }, { {12, 13}, {14, 15} } } _
}
Print(tesseract)
Console.WriteLine()
' 1×1×1×1×1個の要素を持つ5次元配列
Print(New Integer(0, 0, 0, 0, 0) {})
Console.WriteLine()
' 1×0×1×0×1×0個の要素を持つ6次元配列
Print(New Integer(0, -1, 0, -1, 0, -1) {})
Console.WriteLine()
End Sub
End Class