我需要从整数数组中删除所有重复值,但仍保持元素的顺序:
示例:
10,20,20(duplicate),10(duplicate),50
变为:
10,20,50
答案 0 :(得分:0)
Integer
为键的字典。值类型并不重要。 字典的意思是它可以执行O(1)查找。
在伪代码中:
var
arr: TArray<Integer>; // input and output
Dict: TDictionary<Integer, Integer>;
SrcIndex, DestIndex: Integer;
....
DestIndex := 0;
for SrcIndex := 0 to high(arr) do begin
Value := arr[SrcIndex];
if not Dict.ContainsKey(Value) then begin
arr[DestIndex] := arr[SrcIndex];
Dict.Add(Value, 0);
inc(DestIndex);
end;
end;
SetLength(arr, DestIndex);
显然你需要创建和销毁字典。我假设你知道怎么做。我已选择修改阵列,但如果您愿意,可以同样创建一个新阵列。
答案 1 :(得分:0)
这里是没有字典的版本。
procedure TForm2.Button1Click(Sender: TObject);
var
i,j,k:integer;
arr:array of integer;
begin
arr := [10,20,30,40,30,20,10,50,10,70,0,40];
for i := 0 to length(arr)-1 do
for j := length(arr)-1 downto i+1 do
if arr[i] = arr[j] then
begin
for k := j+1 to length(arr)-1 do
arr[k-1] := arr[k];
SetLength(arr,length(arr)-1);
end;
end;