VB.NETの配列の次元について

タグの編集
投稿者 ふく子  (社会人) 投稿日時 2011/6/7 12:05:43
お世話になります。
VB.NETでの配列の次元は、何次元まで可能なのでしょうか。
教えていただければと思います。
投稿者 よねKEN  (社会人) 投稿日時 2011/6/7 12:47:59
上限は32次元です。
http://msdn.microsoft.com/ja-jp/library/ayx7fta3(v=vs.80).aspx

上記の情報に辿りつくために、
以下のようなプログラムを書いてコンパイルしました。

Module A
    Sub Main()
        Dim a(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) As Integer
    End Sub
End Module

投稿者 もちだ  (社会人) 投稿日時 2011/6/7 12:48:52
ヘルプを読んでみました。

「配列では最高 32 次元まで保持することが可能ですが、3 次元より多くなることは稀です。」
だそうで。
投稿者 よねKEN  (社会人) 投稿日時 2011/6/7 12:54:29
先の投稿は多次元配列について書きました。

ジャグ配列は配列の中に配列が入っているだけなので、
おそらくメモリの許す限りいくらでもいけるのでは?と睨んでいます。
MSDNの文書でその辺の事情について書かれたものは見つけていません。

とりあえず以下はコンパイルは通りました。
Module A
    Sub Main()
        'Dim a(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) As Integer 
        Dim a()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() As Integer
        a = Nothing
    End Sub
End Module

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/6/7 14:21:09
多次元配列の 32 という制限値は、VB.NET というよりも .NET 側の制限のようですね。
Dim x() As Integer = Enumerable.Repeat(0, 32).ToArray()
Dim c As Array = Array.CreateInstance(GetType(Integer), x)
Repeat(0, 32) や Repeat(1, 32) ならば生成できますが、
Repeat(0, 33) や Repeat(1, 33) の場合、TypeLoadException の例外が発生しました。

ジャグ配列については、下記のように循環させると、幾らでも階層が増えていきますね。
あまり深くたどると、VB コンパイラよりも先に、開発環境(Visual Studio)側が音を上げてしまいそう。
Dim a(0) As Object
a(0) = a
Debug.WriteLine(a(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0))