versuch es mal mit einem Array von 0 bis 9 und der Bedingung if ((aArray[readPos]))=5 then
Heraus kommt (wie erwartet) das Array [5].
Delphi-Quellcode:
var
aArray: array of Integer;
i, writePos, readPos, retained: Integer;
Function retainElement(i: Integer): Boolean;
begin
//Result := (i and 1)=0 ;
//Result := i in [0, 3, 7];
Result := i = 5;
end;
procedure print(a: array of integer);
var i: integer;
begin
for i := 0 to length(a)-1 do WriteLn(a[i]);
end;
begin
writePos := 0;
retained := 0;
setlength(aArray, 10);
For i := 0 to 9 do
aArray[i] := i;
writePos := 0;
retained := 0;
for readPos := 0 to length(aArray)-1 do
begin
if retainElement(aArray[readPos]) then
begin
if (readPos <> writePos) then aArray[writePos] := aArray[readPos];
inc(writePos);
inc(retained);
end;
end;
setLength(aArray, retained);
print(aArray);
readln;
end.
Unser Code unterscheidet sich nur:
- in der Bedeutung von condition(aArray)
,
- der Zählrichtung von retained
,
- darin, dass du writePos
immer inkrementierst, aber im Falle des Löschens eines Elements vorher dekrementierst.