Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
Delphi 12 Athens
|
Re: Arrays doppelte einträge eliminieren
16. Dez 2009, 10:49
Eine Möglichkeit wäre das Sortieren mit dem Filtern zu koppeln:
Delphi-Quellcode:
type
TElement = Integer;
TMyArray = array of TElement;
function Filter(const Arr: TMyArray): TMyArray;
{---}
function MyCompare(const Item1, Item2: TElement): Integer; inline;
begin
{Vergleich abhängig vom Typ der Elemente}
Result := Item1 - Item2;
end;
{---}
procedure AddResult(var Result: TMyArray; const Element: TElement); inline;
var
idx, idx1, idx2, iComp: Integer;
begin
{Index finden}
idx1 := 0;
idx2 := High(Result);
while idx1 <= idx2 do
begin
idx := (idx1 + idx2) div 2;
iComp := MyCompare(Result[idx], Element);
if iComp < 0 then
idx1 := idx + 1
else if iComp > 0 then
idx2 := idx - 1
else
Exit;
end;
{Einfügen}
SetLength(Result, Length(Result) + 1);
for idx := High(Result) downto idx1 + 1 do
begin
Result[idx] := Result[idx - 1];
end;
Result[idx1] := Element;
end;
{---}
var
i: Integer;
begin
for i := 0 to High(Arr) do
AddResult(Result, Arr[i]);
end;
|
|
Zitat
|