Home » Tipps & Tricks » Object Pascal » Arrays » Array-Element löschen, ohne dass eine Lücke entsteht

Array-Element löschen, ohne dass eine Lücke entsteht

Soll ein Array-Element von einem dynamischen Array gelöscht werden, ohne dass an dieser Stelle eine Lücke verbleibt, müssen alle folgenden Elemente aufrücken, sodass sie den Platz des gelöschten Elements einnehmen. Dann kann das letzte Element entfernt werden.

type
  TIntArray = array of Integer;
procedure DeleteArrayElement(var AArray: TIntArray; const AIndex: Integer);
begin
  Move(AArray[AIndex + 1], AArray[AIndex], SizeOf(AArray[0]) * (Length(AArray) - AIndex - 1)); //Dahinterliegende Daten aufrücken
  SetLength(AArray, Length(AArray) - 1); // Länge kürzen
end;

Der Parameter AArray entspricht dem dynamischen Array, von dem das Element gelöscht werden soll, AIndex gibt die Position von dem zu löschenden Element an.Der Befehl Move verschiebt dabei den Datenblock ab AIndex + 1 um ein Element des Arrays nach vorne. Dazu wird die Quelle, das Ziel und die Anzahl der Bytes, die verschoben werden sollen, angegeben.Dann wird das letzte Element des Arrays abgeschnitten, indem die Länge des Arrays mit SetLength neu gesetzt wird.Achtung: das angegebene Array muss ein dynamisches Array sein!Außerdem muss darauf geachtet werden, dass AIndex null basierend ist (das erste Element hat den Index 0, das zweite den Index 1 usw.)!Beispiel-Aufruf:

var
  IntArray: TIntArray;
begin
  [...]
  //IntArray = (5, 14, 0, 6, 43, 76)
  DeleteArrayElement(IntArray, 3); //Das Element an Position 3 wird entfernt
  //IntArray = (5, 14, 0, 43, 76)
  [...]
end;