Array in Array - z.B.: Int[][] - dynamisch generiert

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Artemis

Betreff: Array in Array - z.B.: Int[][] - dynamisch generiert

BeitragMo, Nov 27, 2006 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin, ich benötige ein Array in einem Array, dynamisch generiert.

Pseudo-Code: [AUSKLAPPEN]
Function createArray(size_x:int, size_y:int)
    Local array:Int[][] = new Int[size_x][size_y]
EndFunction


Er meldet da immer, Zitat:
Unable to convert from 'Int' to 'Int Array Array'
, was ich komisch finde.

Ein Array dieser Art: Int[,] kommt nicht in Frage, da ich das Array in dem anderen Array brauche. Sonst müsste ich noch umständlich ein Array daraus erzeugen. Das wäre der letzte Ausweg.

Das hier:
Code: [AUSKLAPPEN]
Function createArray(size_x:Int, size_y:Int)
   Local array:Int[] = New Int[size_x][]
   For Local i = 0 To size_x-1
      array[i] = New Int[size_y]
   Next
EndFunction
gibt ebenfalls nen Error: Expecting identifier.

Bin ich jetzt aufm falschen Dampfer, oder geht es nicht so, wie ich das haben will?

Blitzcoder

Newsposter

BeitragMo, Nov 27, 2006 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm doch Types. Du erstellst eben z.B. 100 Types, und schreibst dir was, womit man sie mit Nummern ansprechen kann. Und dann kannst du ja ein Feld als Array machen. Ich bin recht neu in BMax, aber ich denke es sollte gehen.

Edit:
Code: [AUSKLAPPEN]
Global tmp:array
Global list:Tlist=CreateList()

Type array
   Field array:String[10]
End Type

For i=1 To 10
   tmp=New array
   list.addlast(tmp)
Next




getarray(4).array[2] = "Bla"

Print getarray(4).array[2]
End

'---------------------------------
Function getarray:Array(num:Int)
   i=0
   For tmp = EachIn list
      i:+1
      If i=num Then
         Return tmp
         Exit
      EndIf
   Next
End Function
  • Zuletzt bearbeitet von Blitzcoder am Mo, Nov 27, 2006 22:25, insgesamt 2-mal bearbeitet
 

Dreamora

BeitragMo, Nov 27, 2006 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die 2 Dimensionen gesondert erstellen

[][] ist ein Array of Array.

Das heisst, du musst erst den "äusseren" Array initialisieren.
In dem Array ist dann jedes Element wieder ein Array, dass du manuell initialisieren musst.

Rein aus gedächtnis

Arr:int[][] = new Int[][100]
for local i:int = 0 to 99
Arr[i] = new int[100]
next
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Artemis

BeitragDi, Nov 28, 2006 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, Dreamora.

Das entspricht meinem zweiten Ansatz, nur dass ich statt Int[size][] ein Int[][size] schreiben muss. Die Logik ist mir nicht klar, aber Hauptsache es funktioniert.

@Blitzcoder,
jo, geht schon, nur ist es in meinem Fall, irgendwie absurd.
 

Dreamora

BeitragDi, Nov 28, 2006 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Frag mich nicht, warum es [][size] ist und nicht umgekehrt. Bin da anfangs auch reingerannt. Aber man gewöhnt sich irgendwann dran, array of array von aussen nach innen zu erzeugen ^^
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jolinah

BeitragMi, Nov 29, 2006 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich finds irgendwie logisch:

Local one:Int [] = new Int [10]
Local two:Int[] [] = new Int[] [10]

Bei zweidimensionalen Arrays ist der Typ jedes Feldes Int[] statt Int (bei eindimensionalen). So ist die Definition immer new feldtyp [size] Wink

Artemis

BeitragMi, Nov 29, 2006 8:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man sich das so betrachtet wird es auf einmal viel logischer. Smile

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group