Mehrdimensionale Arrays durchgehen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Tritium

Betreff: Mehrdimensionale Arrays durchgehen

BeitragMo, Jan 23, 2012 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Nabend,

wie gehe ich bei einem mehrdimensionalen Array alle Objekte per EachIn durch?

Eindimensional wäre das ja
BlitzMax: [AUSKLAPPEN]
Local array:String[] = ["ganz","ein","tolles","array"]

For Local dings:String = EachIn array
Print(dings)
Next

Wenn ich jetzt bspw. ein Array "array[5][4]" erstelle, und alle Einträge von "array[0][3]" bis "array[4][3]" durchgehen möchte, wie mache ich das per EachIn? Oder muss ich ne for-Schleife mit Zähler benutzen?

Xeres

Moderator

BeitragMo, Jan 23, 2012 5:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Um genau zu sein, ist "array[5, 4]" ein mehrdimensionales Array und "array[5][4]" ein Array of Arrays. Entsprechend gibt es für letzteres zwei Möglichkeiten:
BlitzMax: [AUSKLAPPEN]
Local array:String[][] = [["Eins", "Zwei"],  ..
["Drei", "Vier"], ..
["Fünf", "Sechs"], ..
["Sieben", "Acht", "Neun"]]

Rem
Zählen der Einträge:
array.Length gibt die Anzahl der Sub-Arrays wieder
Jedes dieser Sub-Arrays besitzt array[i].Length Einträge
Endrem

For Local y:Int = 0 Until array.Length
For Local x:Int = 0 Until array[y].Length
Print(array[y][x])
Next
Next

Print("")
Print("- - -")
Print("")

Rem
EachIn variante:
array enthält String-Arrays, also wird erst ein String[]
gebraucht.
Dieses Array enthält dann die eigentlichen Strings:
Endrem

For Local a:String[] = EachIn array
For Local s:String = EachIn a
Print(s)
Next
Next
Was auch immer dir lieber ist. Glaube nicht, dass es einen Unterschied macht.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Tritium

BeitragMo, Jan 23, 2012 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, das hilft mir weiter, danke! Smile

Wo genau ist denn der Unterschied zwischen mehrdimensionalen Arrays und Arrays of Arrays? Wenn ich das richtig verstanden hab, dann hat man bei einem mehrdimensionalem Array, z.B. "array[10,10]" ein Array mit 10x10 Einträgen, die alle vom gleichen Type sein müssen, oder?
Und bei einem Array of Arrays wäre es dann so, dass ich z.B. "array[x][y]" hab, also ein Array, dass x andere Arrays mit jeweils y Einträgen besitzt, richtig? Wie ist das dann mit dem Type der Daten, hat das Array mit x Einträgen soz. den 'Type Array' und die Arrays mit y Einträgen jeweils den gleichen Type, z.B. String?

Xeres

Moderator

BeitragMo, Jan 23, 2012 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein array[x, y] besitzt x*y Einträge. Ein array[x][y] besitzt... unbekannt viele Einträge - jedenfalls kann man das nicht so einfach ablesen, da ein Array praktisch beliebig viele Einträge haben kann.
Mit Slices (siehe Doku oder Forensuche) lassen sich eindimensionale Arrays ganz toll kopieren/zerteilen, dass wäre ein guter Grund, Arrays of Arrays zu benutzen.
Ein Array of Arrays enthält <Type>Arrays die <Type>-Daten enthalten - Datentypen mischen kann man nicht.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Tritium

BeitragMo, Jan 23, 2012 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Ein array[x][y] besitzt... unbekannt viele Einträge - jedenfalls kann man das nicht so einfach ablesen, da ein Array praktisch beliebig viele Einträge haben kann.

Aber was gibt dann das y an?

Xeres

Moderator

BeitragMo, Jan 23, 2012 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Vergleiche beide Arrays:
BlitzMax: [AUSKLAPPEN]
Local array:Int[][] = [[1], [2], [3]]
Local array:Int[][] = [[1], [2, 3, 4, 5, 6, 7, 8], [9]]
Du kannst dafür sorgen, das die Subarrays immer gleich lang sind - muss aber nicht sein.
Das Array hat array.Length Subarrays - beides mal 3 Stück. Wie viele Einträge array[i] hat, musst du aber nochmal nachschlagen mit array[i].Length. Jedes Array kann unterschiedlich lang sein. Bei einem [x, y] Block sind Zeilen und Spalten in jedem Fall vorhanden, wenn auch mit 0 oder NULL gefüllt (und nichts darüber hinaus).
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Tritium

BeitragMo, Jan 23, 2012 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt hab ich das auch verstanden, danke für die Geduld! Smile

[Edit]: War wohl nix, noch wollen die Arrays nicht so wie ich will. Warum macht im folgenden Code die Zuweisung in der Schleife nichts?

BlitzMax: [AUSKLAPPEN]
Framework BRL.Blitz
Strict

DebugStop

Local array$[][] = New String[][5]

For Local temp$[] = EachIn array
temp = ["a","b"]
Next

array[1][1] = "test"


End

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group