Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Dynamische Array's


Holg_i - Sa 14.08.10 11:51
Titel: Dynamische Array's

Delphi-Quelltext
1:
2:
3:
var MyArray: array of array of integer;
//...
setlength(MyArray,10,10);  // Ist das gleiche wie .. var MyArray[0..10,0..10] of Integer;


Soweit ist ja alles klar...

Kann ich aber auch folgendes machen:

Ich brauche ein Array welchen ungefähr so aus sieht



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var MyArray: array of array of integer;
//...
setlength(MyArray,1,10);  // Ist das gleiche wie .. var MyArray[0..1,0..10] of Integer;
setlength(MyArray,2,5);  // Ist das gleiche wie ..  var MyArray[0..2,0..5] of Integer;
//..
//..
//..
//..
setlength(MyArray,24,50);  // Ist das gleiche wie ..  var MyArray[0..2,0..5] of Integer;



So das ich ein Array habe von

MyArray[1,0..10]
MyArray[2,0..5]
...
...
MyArray[24,0..50]


Marc. - Sa 14.08.10 12:00

user profile iconHolg_i hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
var MyArray: array of array of integer;
//...
setlength(MyArray,10,10);  // Ist das gleiche wie .. var MyArray[0..10,0..10] of Integer;

Falsch. Mittels SetLength() wird nicht die Obergrenze des Arrays, sondern die tatsächliche Anzahl der Elemente festgelegt. Das erste entsprechend indiziert mit 0. Demzufolge entspräche das dynamische Array in diesem Beispiel var MyArray[0..9,0..9of Integer;.

Beste Grüße,
Marc


Holg_i - Sa 14.08.10 12:39

Ok Ok

aber das war und ist ja nicht meine Fragestellung.

Ich Brauche ein Array das sich in der zweiten Dimension unterschiedliche längen hat...

wie getippt

MyArray[1,0..9]
MyArray[2,0..50]
MyArray[3,0..1]
...
..
..
MyArray[23,0..12]

Die erste Dimension ist mir beim Start nicht bekannt... und die zweite ergibt sich auch erst.

Nehmen wir an die erste Dimension gibt die Benutzernummer an von 1 bis Max Benutzer
und die zweite Dimension gibt einen Eintag an.

So möchte ich mit MyArray[1,5] den fünften eintrag des Benutzers 1 haben...

Benutzer 1 hat in dem fall mal 10 Einträge
Benutzer 2 hat in dem fall mal 51 Einträge
Benutzer 3 hat in dem fall mal 2 Einträge
u.s.w.


Gausi - Sa 14.08.10 12:46

Du kannst in einem 2D-Array jedem Array eine eigene Größe geben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
MeinArray = Array of Array of Integer;

Setlength(MeinArray, 100); // Dann hast du 100 Benutzer

Setlength(MeinArray[0], 10); // Nutzer 0 hat dann 10 Einträge
Setlength(MeinArray[1], 42); // Nutzer 1 hat dann 42 Einträge
// usw.


Marc. - Sa 14.08.10 12:47

user profile iconHolg_i hat folgendes geschrieben Zum zitierten Posting springen:
Ok Ok

aber das war und ist ja nicht meine Fragestellung.

Halte ich dennoch für nicht ganz unwichtig. ;)

user profile iconHolg_i hat folgendes geschrieben Zum zitierten Posting springen:
Ich Brauche ein Array das sich in der zweiten Dimension unterschiedliche längen hat...
[...]
MyArray[1,0..9]
MyArray[2,0..50]
[...]


Delphi-Quelltext
1:
SetLength(MyArray[X], Y);                    

X seie der Index der ersten, Y die Länge der zweiten Dimension.

Wofür die Komma Null? Ein Index ist immer eine ganze Zahl. :gruebel:


delfiphan - Sa 14.08.10 13:02

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Wofür die Komma Null? Ein Index ist immer eine ganze Zahl. :gruebel:

Das Dezimaltrennzeichen in den meisten Programmiersprachen ist ".", daher soll dieses Komma wohl eher die Dimensionen trennen.


Marc. - Sa 14.08.10 13:54

user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Wofür die Komma Null? Ein Index ist immer eine ganze Zahl. :gruebel:

Das Dezimaltrennzeichen in den meisten Programmiersprachen ist ".", daher soll dieses Komma wohl eher die Dimensionen trennen.

Jetzt seh ich's auch. Ein Leerzeichen zwischen den beiden Parametern wäre auch zu eindeutig gewesen. :autsch: Danke.


Holg_i - Mo 16.08.10 14:01

Danke euch alle.

Genau so wie Gausi es aufgezeigt hatt so geht es wunderbar.