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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!