Array aus einen mehrdimensionalen Array benutzen

  • Hallo, ich habe ein Problem.
    Ich möchte ein Array aus meinen 2 Dim Array an eine funktion übergeben:

    [autoit]


    $array[2][2]=[[1,2,3], [1,2,3]]
    _func($array[0])

    [/autoit]


    Dabei krieg ich die Fehlermeldung: Array variable has incorrect number of subscripts or subscript dimension range exceeded.
    Wie macht man das richtig?

    Einmal editiert, zuletzt von igromanru (8. Februar 2012 um 22:28)

    • Offizieller Beitrag

    Wenn du ein Mehrdimensionales Array hast, kannst du auch nur mehrdimensionale Elemente übergeben. Du versuchst ein 1D-Array zu übergeben, dass ja gar nicht existiert.
    Ausserdem stimmt schon die Deklaration nicht. Du deklarierst [2][2] und setzt Elemente für ein [3][2] - Array
    Oder soll das keine Deklaration darstellen sondern die Zuweisung an das Arrayelement [2][2] ?
    Übergeben könntest du zum Bsp. $array[0][0]

  • Beispiele:

    [autoit]


    Global $MyArray[2][3]=[[1,2,3], [4,5,6]]

    [/autoit][autoit][/autoit][autoit]

    PrintArray($MyArray)
    DisplayArrayValue($MyArray[1][2])

    [/autoit][autoit][/autoit][autoit]

    Func PrintArray($array)
    Local $i, $j
    For $i = 0 To UBound($array) - 1
    For $j = 0 To UBound($array, 2) - 1
    ConsoleWrite($array[$i][$j] & @LF)
    Next
    Next
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func DisplayArrayValue($aValue)
    ConsoleWrite($aValue & @LF)
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • So einfach ist es bei AutoIt leider nicht Teilbereiche eines Arrays auszuschneiden.
    2 Möglichkeiten hast du:

    • Statt einem 2D-Array ein Array von Arrays erstellen (also ein 1D-Array welches als Elemente einzelne Arrays enthält):
      Spoiler anzeigen
      [autoit]

      Global $array[2]
      Global $a_Temp1[3] = [1,2,3], $a_Temp2[3] = [3,2,1]
      $array[0] = $a_Temp1
      $array[1] = $a_Temp2

      [/autoit] [autoit][/autoit] [autoit]

      _func($array[0])

      [/autoit]
    • Ein temporäres Array mit den Werten des Teilbereiches:
      Spoiler anzeigen
      [autoit]

      Global $array[2][3]=[[1,2,3], [1,2,3]]
      Global $a_Temp[3]
      For $i = 0 To 2
      $a_Temp[$i] = $array[0][$i]
      Next
      _func($a_Temp)

      [/autoit]
  • Du deklarierst [2][2] und setzt Elemente für ein [3][2] - Array
    Oder soll das keine Deklaration darstellen sondern die Zuweisung an das Arrayelement [2][2] ?


    Oh, entschuldigung. Ich habe mich vertippt bei dem Beispiel.
    Mein array ist viel größer, deshalb hab ich einfach schnell ein Beispiel hingeschrieben.

    Danke an alle für hilfreiche Antworte.
    Jetzt weiß ich was für 2 Fehler ich gemacht hab.
    1. Ich habe einen Denckfehler gemacht und in theorie sollte es so sein $array[2] = [ [1,2,3], [1,2,3] ]
    2. Aber das geht leider nicht.

    Ich habe immer wieder mit ganz verschiedenen Programmiersprachen zutun, komme durch einander.
    Bei xBase++ kann man so was mit arrays machen.^^

    Dann werde ich eben anders machen.