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
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
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:
For $i = 0 to 4
For $j = 0 To 1
$aTest2[$i][$j] = $i + 1
Next
Next
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
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.
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:
Local $aInner_1[] = [1,2,3]
Local $aInner_2[] = [4,5,6]
Local $aOuter[] = [$aInner_1,$aInner_2]
; Lesen
For $i = 0 To UBound($aOuter) -1
For $j = 0 To UBound($aOuter[$i]) -1
ConsoleWrite('Outer[' & $i & '] - Inner[' & $j & ']: ' & ($aOuter[$i])[$j] & @CRLF)
Next
Next
; Schreiben
For $i = 0 To UBound($aOuter) -1
$aTmp = $aOuter[$i]
For $j = 0 To UBound($aTmp) -1
$aTmp[$j] += 10
Next
$aOuter[$i] = $aTmp
Next
Alles anzeigen
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....