# Mehrdimensionales Array ...



## LadySunshine (21. Juni 2004)

Hi Leute ich habe ein kleines Problem:

Ich habe mir ein Array gebastelt welches 4 Dimensional ist, nun möchte ich aus den 4 Schritten unten einen machen. Also der eine Wert an die Stelle 1,der andere an 2 usw..Wenn ich es so Step by Step mache klappt.Wenn ich die letzte Variante nehme  es zwar auch,aber ich das Problem ist , ich kann nicht einen einzigen Wert direkt ansprechen z.b. Print ArrayKoord(1,0,0,0) ,


```
ArrayKoord(i,0,0,0)=""+(sqlda.value(1))+""
 ArrayKoord(0,i,0,0)=""+(sqlda.value(2))+""
 ArrayKoord(0,0,i,0)=""+(sqlda.value(3))+""
 ArrayKoord(0,0,0,i)=""+(sqlda.value(4))+""
                        
ArrayKoord(i,i,i,i)=""+(sqlda.value(1))+","+(sqlda.value(2))+","+(sqlda.value(3))+","+(sqlda.value(4))+""
```

Wer hat einen Tipp für mich?

Danke schonmal


----------



## Retlaw (22. Juni 2004)

> _Original geschrieben von LadySunshine _
> ...
> Wenn ich die letzte Variante nehme  es zwar auch,aber ich das Problem ist , ich kann nicht einen einzigen Wert direkt ansprechen z.b. Print ArrayKoord(1,0,0,0) ,
> 
> ...


Nehmen wir mal an i hat den Wert 1, dann würde da stehen:

```
ArrayKoord(1,0,0,0)=""+(sqlda.value(1))+""
 ArrayKoord(0,1,0,0)=""+(sqlda.value(2))+""
 ArrayKoord(0,0,1,0)=""+(sqlda.value(3))+""
 ArrayKoord(0,0,0,1)=""+(sqlda.value(4))+""
                        
ArrayKoord(1,1,1,1)=""+(sqlda.value(1))+","+(sqlda.value(2))+","+(sqlda.value(3))+","+(sqlda.value(4))+""
```
Und das du mit der Array-Position 1,1,1,1 nicht 1,0,0,0 0,1,0,0 0,0,1,0 und 0,0,0,1 zugleich abfragen kannst sollte ja klar sein  
Wenn ich dich richtig verstanden haben willst du vier Werte in ein Array schreiben und würdest für 10 Werte ein 10-dimensionales Array verwenden?
Für diese Zwecke reicht ein eindimensionales Array:

```
Dim ArrayKoord(1 to 4) as WasAuchImmer
Dim i as Integer

For i = LBound(ArrayKoord) To UBound(ArrayKoord) 'machen wir dynamisch damit man nichts ändern muss wenn das Array mal eine andere Größe hat
    ArrayKoord(i) = ""+(sqlda.value(i))+""
Next i
```
So liest du vier Werte in ein Array ein.
Wenn du die Daten nur ausgeben willst brauchst du aber nichtmal ein Array, dazu würde es reichen in der Schleife alles an einen String zu hängen:

```
Ausgabe = Ausgabe & ""+(sqlda.value(i))+""
```


----------



## LadySunshine (22. Juni 2004)

Danke für deine Hilfe,dachte schon das ich wohl nicht um eine Schleife rum komme.
Ich hab dann noch einen weitere Frage, ich bin gerade dabei zu versuchen das Programm zu optimieren, wie Speicher und Laufzeitintensiv sind denn Arrays? Ich hab mom nur ein dimensionale, das möchte ich umstruktrieren in mehrdim. Ist es zu empfehlen eher mehrdim zu erstellen oder doch lieber eindim?
Kennt vll noch jmd eine Seite wo es etwas Hilfe zur Optimierung gibt? Ich bin noch Basic Newbie...

Thx


----------



## Retlaw (22. Juni 2004)

Speicherverbrauch bei Arrays hängt ganz davon ab wieviel Felder es hat.
Beispiel:
Eine Variable vom Typ Byte benötigt ein Byte Speicherplatz.
Ein paar Bytes gehen immer für die Verwaltung des Arrays selber drauf, aber das kann man vernachlässigen.

```
'Speicherplatzverbrauch:
Dim a1(1 to 5) as Byte  '5 Felder, also 5 Bytes für Daten
Dim a2(1 to 5, 1 to 2) as Byte  'zweidimensional, braucht 5*2=10 Bytes
Dim a4(5,5,5,5) as Byte  'vierdimensional, braucht 5*5*5*5=625 Bytes
Dim a5(9,9,9,9) as Byte  'auch vierdimensional, braucht 9*9*9*9=6561Bytes
```
Aber ob du ein Array mit 5 Feldern oder 5 einzelne Variablen nimmst ist vom Speicherverbrauch kaum ein Unterschied, lediglich die Handhabung wird durch Arrays besser.

Schleife brauchst du übrigens nicht zwingend wenn du weißt das es genau vier 
Datensätze sind:

```
ArrayKoord(1) = ""+(sqlda.value(1))+""
ArrayKoord(2) = ""+(sqlda.value(2))+""
ArrayKoord(3) = ""+(sqlda.value(3))+""
ArrayKoord(4) = ""+(sqlda.value(4))+""
```
Das würde genauso gehen, eine Schleife ist aber eleganter und flexibler.

Mehrdimensionale Arrays braucht man nur wenn man entsprechende Daten hat.
Ein zweidimensionales Array würde z.B. für eine Fläche die aus Feldern dargestellt ist (Schachbrett) oder eine Tabelle sinnvoll sein.

Für eine einfache Folge von Werten reichen eindimensionale Arrays.

```
Dim var(4) as Byte 'eindimensionales Array mit 4 Feldern
'Zugreifen auf die einzelnen Felder:
var(0) = daten
var(1) = daten
var(2) = daten
var(3) = daten
'Achtung: Standard beim Index ist 0 bis Anzahl Felder - 1

'Tabelle:
Dim var(5,2) '5 Zeilen mit jeweils 2 Feldern (Spalten)
var(0,0) = "Zeile1, Spalte1"
var(3,0) = "Zeile4, Spalte1"
var(2,1) = "Zeile3, Spalte2"
```


----------



## LadySunshine (23. Juni 2004)

Dein letztes Posting hat mich noch auf eine andere Idee gebracht, habe das Ganze viel zu umständlich gemacht, nu  es ganz gut habe jetzt eine Tabelle angelegt mit i Zeilen und  4 Spalten. Hab mal wieder viel zu umständlich gedacht


----------

