1

vb.netで3D配列を定義、動的に初期化、および印刷する方法は?

3D 配列を返すこのコードがあり、範囲外の引数があるというエラーが表示されます..そして、行を探しても何も問題はありませんでしたか?

これは関数コードです:

Private Function readFESTWERTEBLOCK(ByVal FESTWERTEBLOCKString As String ) _
    As String (,,)

    Dim allX As System.Text.RegularExpressions .Group
    Dim allY As System.Text.RegularExpressions.Group
    Dim allZ As System.Text.RegularExpressions.Group
    Dim tempArray (,,) As String 
    Dim allXval As System.Text.RegularExpressions .MatchCollection
    Dim allYval As System.Text.RegularExpressions.MatchCollection 
    Dim allZval As System.Text.RegularExpressions.MatchCollection
    Dim oldUp ,midUp,newUp  As Integer 
    Dim a,b,c
    Dim myRegExpallX As New System.Text.RegularExpressions.Regex("WERT([\-\s\.0-9e]+)")
    Dim myRegExpallY As New System.Text.RegularExpressions.Regex("WERT([\-\s\.0-9e]+)")
    Dim myRegExpallZ As New System.Text.RegularExpressions.Regex("WERT([\-\s\.0-9e]+)")
    Dim myRegExpallXval As New System.Text.RegularExpressions.Regex("[\w\-\.]+")
    Dim myRegExpallYval As New System.Text.RegularExpressions.Regex("[\w\-\.]+")
    Dim myRegExpallZval As New System.Text.RegularExpressions.Regex("[\w\-\.]+")

    ReDim tempArray (0 To 2 ,0 To -1, 0 To -1 )
    For a=0 To myRegExpallX.Matches(FESTWERTEBLOCKString).Count-1
        If myRegExpallX.Matches(FESTWERTEBLOCKString).Item(a).Groups.Count>1 And myRegExpallY.Matches(FESTWERTEBLOCKString).item(a).Groups.Count>1 AndAlso myRegExpallZ.Matches(FESTWERTEBLOCKString).item(a).Groups.Count>1 Then
            allX = myRegExpallX.Matches(FESTWERTEBLOCKString).Item(a).Groups.Item(1)
            allXval= myRegExpallXval.Matches(allX.Value.ToString())

            allY = myRegExpallY.Matches(FESTWERTEBLOCKString).Item(a).Groups.Item(1)
            allYval= myRegExpallYval.Matches(allY.Value.ToString())

            allZ = myRegExpallZ.Matches(FESTWERTEBLOCKString).Item(a).Groups.Item(1)
            allZval= myRegExpallZval.Matches(allZ.Value.ToString())

            oldUp= UBound(tempArray,3)
            midUp= UBound(tempArray , 3) + allXval.Count
            newUp=UBound(tempArray,3)+allXval.Count+allYval.Count

            ReDim Preserve tempArray(0 To 2 ,0 To midUp ,0 To newUp)
            For c=oldUp+2 To (allXval.Count+allYval.Count+oldUp)
                For b= midUp+2 To allXval.Count+midUp
                   Dim tmpMatchX As System.Text.RegularExpressions.Match=allXval.Item(b-oldUp-2)
                   tempArray(0,b,c)=tmpMatchX.Value.ToString()
                   Dim tmpMatchY As System.Text.RegularExpressions.Match=allYval.Item(b-oldUp-2)
                   tempArray(1,b,c)=tmpMatchY.Value.ToString()
                   Dim tmpMatchZ As System.Text.RegularExpressions.Match=allZval.Item(b-oldUp-2)
                   tempArray(2,b,c)=tmpMatchZ.Value.ToString()
                Next
            Next
        End If
    Next       
    readFESTWERTEBLOCK = tempArray
End Function
4

1 に答える 1

3

このように3次元配列を初期化できます

Dim a(,,) As Double

a = New Double(5, 4, 10) {}

この配列には、次のインデックス範囲があります

a(0..5, 0..4, 0..10)

そして、6 x 5x11要素のサイズがあります。


成長できる寸法がある場合はList(Of T)、それらに使用してください

Dim tempArray As List(Of List(Of String))() = New List(Of List(Of String))(2) {}

tempArray(0) = New List(Of List(Of String))()

tempArray(0).Add(New List(Of String)());
tempArray(0)(0).Add("Some string");
tempArray(0)(0).Add("Some other string");

tempArray(0).Add(New List(Of String)());
tempArray(0)(1).Add("XXX");
tempArray(0)(1).Add("YYY");
tempArray(0)(1).Add("ZZZ");

tempArray(0)(1)(2) ===> "YYY"
于 2012-06-24T21:45:04.983 に答える