1. 程式人生 > >delphi合併兩個陣列例子

delphi合併兩個陣列例子

使用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;