Array 1D zu 2D

  • Moin,

    Spoiler anzeigen

    Dim $aArray[6]

    $aArray[0] = '1'

    $aArray[1] = '2'

    $aArray[2] = '3'

    $aArray[3] = '4'

    $aArray[4] = '5'

    $aArray[5] = '6'

    $rows = UBound($aArray)

    $rows1 = $rows / 3

    Dim $aArray2D[$rows1][3]

    Local $cols = UBound($aArray2D, 2)

    For $i = 0 To UBound($aArray) - 1

    $aArray2D[0][0] = $aArray[0]

    $aArray2D[0][1] = $aArray[1]

    $aArray2D[0][2] = $aArray[2]

    $aArray2D[1][0] = $aArray[3]

    $aArray2D[1][1] = $aArray[4]

    $aArray2D[1][2] = $aArray[5]

    Next

    _ArrayDisplay($aArray2D)


    Ich versuche ein Array von 1D zu 2D zu wandeln.

    Nach jedem 3. Eintrag soll eine neue Zeile beginnen und die darauffolgenden 3. Einträge in die nächste Zeile eingetragen werden.

    Das Array kann sehr lang werden. So wie in dem Beispiel soll es aussehen, natürlich dynamisch.

    Könnt ihr mir helfen?

    • Offizieller Beitrag

    Wenn du jeweils 3 Elemente in eine Zeile (3 Spalten) des 2D-Arrays packst, berechnest du das letzte Element des 1D-Arrays, das du adressieren darfst so:

    Index für letztes Element im Array:

    Ubound($a1D) -1

    Da du in 3-er Schritten durch das Array iterierst, musst du vom letzten Index 3 Schritte zurück gehen, damit du beim Zugriff auf die Elemente (Schleifenzähler +1 / +2) nicht die Arraygrenze überschreitest. Das führt sonst zu einem Laufzeitfehler. Da wir aber die 0 als ersten Index haben (zum aktuellen Index wird für die erste Spalte 0, zweite Spalte 1 und dritte Spalte 2 addiert), müssen wir, um den letzten Index festzulegen "Schrittweite - letzter Spaltenindex" vom Ubound abziehen (war in meinem Post ein Fehler wegen schlecht aus der Hüfte gezielt von mir ;) )

    letzter adressierbarer Index:

    Ubound($a1D) -1 -2 = Ubound($a1D) -3

    Das von dir verwendete Ubound($a1D) -2 ist zwar falsch, wirft aber keinen Fehler, da dieser Index durch Step = 3 gar nicht angesprungen werden kann.