Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Arrayteil löschen?


Delphi2009lover - So 13.12.09 20:20
Titel: Arrayteil löschen?
Hey,

ich habe ein Array

A[0] := 'A';
A[1] := 'B';
...
A[25] := 'Z';


Wie kann ich jetzt den Buchstaben "B" rauslöschen? (Länge des Arrays soll am Schluss natürlich 25 und nich wie vorher 26 sein)


Gausi - So 13.12.09 20:21

Da musst du in einer Schleife das Array durchgehen, und alle Einträge ab dem 'A' um eins nach vorne schieben. Anschließen Setlength aufrufen und da die Länge des Array passend setzen.


Boldar - So 13.12.09 20:32

Wenns um performance geht, könnte man das array auch als Pointer verwalten, dann den Platz vom 'A' freigeben, und in Das 'B' ein 'A' schreiben.
Oder Gleich eine pointerliste (Delphi-Objekt TList) nehmen.


Gausi - So 13.12.09 20:34

Wobei die TList auch nur ein Array ist. Sieht zwar wie eine Liste aus und stellt die Operationen Insert etc. bereit, aber intern wird da wild umherkopiert. TList ist keine verkettete Liste!


Boldar - So 13.12.09 20:35

Aber bei TList braucht man nur die Pointer verschieben, und nicht die Werte.


Gausi - So 13.12.09 20:38

Und genau das stimmt nicht. Wenn du in einer TList das erste Element löschst, dann wird das gelöscht, und der ganze Krempel dahinter wird eine Position nach vorne kopiert. Ob dabei die Chars kopiert werden, oder die Pointer darauf, spielt eigentlich keine Rolle.


Nano-Ware - So 13.12.09 20:47

Das mit dem Nachvornesetzen habe ich schon versucht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
for I := FR_MAIN.LIST_VIDEO.Selected.Index to Length(ListArray) - 1 do
  begin

    ListArray[I][0] := ListArray[I + 1][0];
    ListArray[I][1] := ListArray[I + 1][1];
    ListArray[I][2] := ListArray[I + 1][2];
    ListArray[I][3] := ListArray[I + 1][3];
    ListArray[I][4] := ListArray[I + 1][4];
    ListArray[I][5] := ListArray[I + 1][5];
    ListArray[I][6] := ListArray[I + 1][6];

  end;


FR_MAIN.LIST_VIDEO ist eine TListView


Meldung zu wenig Arbeitsspeicher...


Thx schon mal jetzt


Flamefire - So 13.12.09 22:25

Du kommst über die Array-Grenzen!
Wenn dann, muss die Schleife bis Length(ListArray) - 2 gehen, da du immer ein i+1 hast