2d array - warum so und nicht anders ?

  • Kann mir bitte jemand erklären warum das funktioniert:
    DIM $aTest2[5][2] = [ [1,1], [2,2], [3,3], [4,4], [5,5] ]

    und das nicht
    DIM $aTest2[5][2]
    $aTest2[5][2] = [ [1,1], [2,2], [3,3], [4,4], [5,5] ]

    Ich verstehe das nicht.

    Danke

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Hi
    Im ersten Fall legst Du ein Array an und es wird beim Anlegen gleich mit Werten befüllt.

    Im zweiten Fall legst Du mit Dim ein Array einer bestimmten Größe an: DIM $aTest2[5][2]

    Dann befüllst Du das Array mit $aTest2[5][2] = [ [1,1], [2,2], [3,3], [4,4], [5,5] ]
    Das würde aber nur das Feld [5][2] befüllen. Dieses Feld existiert aber nicht, da das letzte Feld Deines Arrays [4][1] ist (Array beginnt immer bei 0 und nicht bei 1). Daher die Fehlermeldung.

    Du könntest es so befüllen:

    Spoiler anzeigen
    [autoit]


    For $i = 0 to 4
    For $j = 0 To 1
    $aTest2[$i][$j] = $i + 1
    Next
    Next

    [/autoit]

    Dann hättest Du das gleiche Ergebnis, wie im ersten Fall.

    Ich hoffe, ich konnte es verständlich formulieren.

    Gruß

  • OK das mit dem [5][2] bzw [4][1] hätte ich wissen müssen, da mir klar ist dass ein Array bei 0 beginnt.
    Bedeutet das , dass ein Befüllen wie es beim Anlegen funktioniert, ($aTest2[5][2] = [ [1,1], [2,2], [3,3], [4,4], [5,5] ]) bei einem vorhandenen Array nicht funktioniert?

    Denn auch ein $aTest2[1][1] = [ [1,1] ] oder $aTest2[1][0] = [ [1,1] ] geht ja nicht.

    Das würde bedeuten Mehrdimmensionale Arrays können nicht zeilenweise befüllt werden?

    Könnte das bitte jemand bestätigen oder verneinen ?
    Danke
    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Nein ich glaub da bist du grad zu engstirnig an deiner Schreibweise.

    Zeilenweise befüllen wäre

    $aArray[0][0] = 1
    $aArray[0][1] = 1
    $aArray[1][0] = 2
    $aArray[1][1] = 2
    ...

    Du kannst also solche Belegungen einfach durch Schleifen lösen. Nur ne Vermutung, aber ggf. ReDim mal anschauen, auch wenn es nicht immer zu empfehlen ist.

    Grüße Yaerox

    Grüne Hölle

    • Offizieller Beitrag

    Das würde bedeuten Mehrdimmensionale Arrays können nicht zeilenweise befüllt werden?

    Arrays können ausschliesslich während der Deklaration komplett befüllt werden (egal ob 1D oder 2D). Ein bereits erstelltes Array ist nur noch über jedes einzelne Element befüllbar.
    Kann man syntaktisch umgehen, indem man Arrays im Array verwendet. Allerdings muss man dann beim Lesen/Schreiben von Werten innerhalb dieses Array-Im-Array selbiges zuerst in eine separate Variable lesen um Zugriff zu erlangen. Wobei zum Lesen ein Kapseln des Zugriffs schon reicht:

  • Danke Euch beiden.

    Ich habe schon vereinzelt 1D Arrays von Hand befüllt, aber eben immer nur 1Spalte (da ja 1D) an einer Stelle. Nun war die Idee 2D Arrays alle Spalten einer Zeile von Hand in einem Aufwasch zu füllen. BugFix hat mir den Zahn gezogen. Mir war tatsächlich nicht klar, dass das so nicht geht.

    Danke

    Gruß

    Peter

    PS: Yaerox ja DU hast recht. Ich wollte das mit Gewalt einzeilig lösen. Ein gutes Beispiel wie man manchmal den Wald....

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)