delphi合併兩個陣列例子
阿新 • • 發佈:2019-01-30
使用delphi寫的例子,但願有人來看…
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var arr1,arr2,arr3,arr4:array of Integer;
i,k,n,x:Integer;
a,b:integer;
flag:boolean;
begin
Randomize;
a:=3;
b:=5;
SetLength(arr1,a);
SetLength(arr2,b);
lst1.Clear;
repeat
flag:=True ;
for i:=0 to (a-1) do
arr1[i]:=Random(5);
for i:=0 to (b-1) do
arr2[i]:=Random(6);
//由於陣列1和陣列2的元素是隨機出來的可能存在重複
for i:=0 to (a-2) do
begin
for k:=(i+1) to (a-1) do
begin
if arr1[i]=arr1[k] then flag:=False;
end;
end;
for i:=0 to (b-2) do
begin
for k:=(i+1) to (b-1) do
begin
if arr2[i]=arr2[k] then flag:=False;
end;
end;
until flag;
//將兩個陣列內容比較,排除重複的
if a>b then
begin
//遍歷數量少的那個陣列
for i:=0 to (b-1) do
for k:=0 to (a-1) do
begin
//如果陣列1和陣列2有相同元素,那麼去掉陣列2中的相同元素
//陣列1獨有的元素+陣列1和2共有的元素+陣列2獨有的元素
if arr2[i]=arr1[k] then begin
arr2[i]:=-100;
end;
end;
end
else
begin
for i:=0 to (a-1) do
for k:=0 to (b-1) do
begin
//如果陣列1和陣列2有相同元素,那麼去掉陣列2中的相同元素
//陣列1獨有的元素+陣列1和2共有的元素+陣列2獨有的元素
if arr1[i]=arr2[k] then begin
arr1[i]:=-100;
end;
end;
end;
//找出少的那個陣列值為-1的數量
//陣列1的數量+陣列2的數量-重複數量
x:=0;
//這是a>b的情況
if a>b then
begin
for i:=0 to (b-1) do
begin
if arr2[i]=-100 then x:=x+1;
end;
n:=a+b-x;
SetLength(arr3,n);
for i:=0 to (a-1) do
begin
arr3[i]:=arr1[i];
end;
if (b-x)<>0 then SetLength(arr4,b-x);
k:=0;
for i:=0 to (b-1) do
begin
if arr2[i]<>-100 then
begin
arr4[k]:=arr2[i];
k:=k+1;
end;
end;
//x=0的時候說明沒有重複的
for i:=a to (b-x+a-1) do
begin
if (b-x)<>0 then arr3[i]:=arr4[i-a];
end;
end
// a<=b的情況
else
begin
for i:=0 to (a-1) do
begin
if arr1[i]=-100 then x:=x+1;
end;
n:=a+b-x;
SetLength(arr3,n);
for i:=0 to (b-1) do
begin
arr3[i]:=arr2[i];
end;
//x=0的時候說明沒有重複的
if (a-x)<>0 then SetLength(arr4,a-x);
k:=0;
for i:=0 to (a-1) do
begin
if arr1[i]<>-100 then
begin
arr4[k]:=arr1[i];
k:=k+1;
end;
end;
//x=0的時候說明沒有重複的
for i:=b to (a-x+b-1) do
begin
if (a-x)<>0 then arr3[i]:=arr4[i-b];
end;
end;
k:=0;
for i:= 0 to (n-1) do
begin
k:=k+1;
lst1.Items.Add(IntToStr(arr3[i]));
end;
edt1.Text:=IntToStr(k);
end;