Ich habe es nicht getestet, aber wenn z.B. Element 5 gelöscht werden soll, würde
IMHO Element
0 mit dem Wert von Element 5 überschrieben und das letzte Element z.B. 10 nach dem Durchlauf gelöscht ....
writePos und retained beinhalten die selben Werte ...
Wenn Condition invers gemeint ist fehlt
IMHO ein else Zweig
Zitat:
var aArray: array of Something;
var writePos, readPos, retained: integer;
//...
writePos := 0;
retained := 0;
for readPos := 0 to length(aArray)-1 do
begin
if condition(aArray[readPos]) then
begin
if (readPos <> writePos) then aArray[writePos] := aArray[readPos];
inc(writePos);
inc(retained);
end;
end;
setLength(aArray, retained);