Na, dann teste doch einfach die einzelnen Abschnitte deines Codes, ob sie so arbeiten wie sie sollen.
Eine Alternative zum Finden von doppelten Einträgen wäre noch die Einführung eines temporären Arrays. Diese Variante finde ich in sofern "schöner" als dass man sich dabei nicht in so vielen verschachtelten For-Schleifen verliert.
Delphi-Quellcode:
function IsInArray(Element: DeinTyp; ElementArray: Array of DeinTyp): boolean;
var i: integer;
begin
for i:=0 to length(ElementArray)-1 do
begin
if DeineEqualsFunktion(Element, ElementArray[i]) then
begin
Result:=true;
exit;
end;
end;
Result:=false;
end;
procedure DeleteDoubleElements(var ElementArray: Array of DeinTyp);
var
i, iActualLength, iIndex: integer;
tmp: Array of DeinTyp;
begin
iIndex:=0;
iActualLength:=0;
// Temp-Array initialisieren
SetLength(tmp, Length(ElementArray));
for i:=0 to length(tmp)-1 do
begin
tmp[i]:=[i]DeinInitialwert[/i];
end;
// Elemente nur einmalig nach tmp kopieren
for i:=0 to length(ElementArray)-1 do
begin
if not IsInArray(ElementArray[i], tmp) then
begin
tmp[iIndex]:=ElementArray[i];
inc(iIndex);
inc(iActualLength);
end;
end;
// Temp-Array nach ElementArray zurück kopieren
SetLength(ElementArray, iActualLength);
for i:=0 to iActualLength-1 do
begin
ElementArray[i]:=tmp[i];
end;
end;