Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array Einträge richtig löschen


mexx - Mi 28.03.07 16:48
Titel: Array Einträge richtig löschen
Ich möchte die Einträge eines Array of String löschen/entfernen. Dafür kann ich eine For-Schleife verwenden, die die Inhalte auf '' setzt. Aber es gibt vielleicht noch eine elegantere Lösung als diese?


Hobby-Programmierer - Mi 28.03.07 22:04

Nabend ...,
warum willst du überhaupt die Einträge löschen?

Wenns unbedingt sein muss, dann etwa so - hängt natürlich von der Array-Größe ab:
Du könntest dir über einen Index die gelöschten, ähmähm Items?, merken und bei Bedarf mit neuen Einträgen überschreiben;
oder aber
bei einem dyn. Array die Länge neu setzen, nachdem du jeweils mit deinen Einträgen 'nachgerückt' bist.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var i: Integer;
begin
  if index < High(MyArray) then // ist Index < letzter Eintrag ?
    for i:= index to High(MyArray) -1 do 
       MyArray[i]:= MyArray[i+1]; // Eintrag nach vorne kopieren
  SetLength(MyArray, Length(MyArray)-1); // Arraylänge neu festlegen
end;


LG Mario


mexx - Do 29.03.07 07:50

Das löschen der Einträge muss einfach sein. Deinen Vorschlag hätte ich auch so machen wollen. Ich dachte es gibt einen Befehl, der alle Einträge löscht.


ene - Do 29.03.07 07:55

Moin,

wenn es ein eindimensionales Array ist, versuchs mal mit MyArr:= Nil;


IngoD7 - Do 29.03.07 08:38

user profile iconene hat folgendes geschrieben:
wenn es ein eindimensionales Array ist, versuchs mal mit MyArr:= Nil;
:?
Mit statischen Arrays geht das gar nicht.
Mit dynamischen Arrays ist, wenn MyArr die letzte Referenz auf das Array war, der ganze Speicher freigegeben, das Array danach also gar nicht mehr greifbar. Und wenn MyArr nicht die letzte Referenz war, dann bewirkt das - bezogen auf die Elementinhalte - gar nichts.


mexx - Do 29.03.07 08:39

Ich habs jetzt mit der For-Schleife gelöst.