一个思路 将这几个变量存放到一个数组中,然后对处理数组: aData: array[a..h] of TSomeType; //存放数据 for i := low( aData ) to high( aData ) do for j := low( aData ) to high( aData ) do if ( i <> j ) then if aData[i] = aData[j] then DoOnEqual( i, j );
aData: array[a..h] of TSomeType; //存放数据 for i := low( aData ) to high( aData ) do for j := i+1 to high( aData ) do if aData[i] = aData[j] then DoOnEqual( i, j );
SoftWare1999(Programmer),你改的好!
还可以用集合的方法:type TMySet=Set of 0..255;var i:integer; MySet:TMySet; MyArray:array[1..10] of 0..255; //MainBodybegin //Result:=False; MySet:=[]; for i:=1 to 10 do begin if(MyArray[i] in MySet) then begin //Result:=True; ShowMessage('Equal Exist: '+IntToStr(MyArray[i])+'!'); Exit; end else MySet:=MySet+[MyArray[i]]; end; end;
然后用find来看相同的有几个,
这样总共次数不过你变量的次数
将这几个变量存放到一个数组中,然后对处理数组:
aData: array[a..h] of TSomeType; //存放数据
for i := low( aData ) to high( aData ) do
for j := low( aData ) to high( aData ) do
if ( i <> j ) then
if aData[i] = aData[j] then
DoOnEqual( i, j );
这个做法有点不好,就是同一对数据相等的话,会触发两次 OnEqual 事件;
则还需要有个能够存放两个变量是否已经相等过了的地方。
推荐用 TStringlist, 将 IntToStr(i) + ':'+ IntToStr(j) 存进去,
每次触发 OnEqual 事件的时候,去检查一下,是否有
IntToStr(i) + ':'+ IntToStr(j) 或者 IntToStr(j) + ':'+ IntToStr(i) 的字符串
存在,若不存在,则是第一次相等;
for i := low( aData ) to high( aData ) do
for j := i+1 to high( aData ) do
if aData[i] = aData[j] then
DoOnEqual( i, j );
还可以用集合的方法:type TMySet=Set of 0..255;var i:integer;
MySet:TMySet;
MyArray:array[1..10] of 0..255;
//MainBodybegin
//Result:=False;
MySet:=[];
for i:=1 to 10 do
begin
if(MyArray[i] in MySet) then
begin
//Result:=True;
ShowMessage('Equal Exist: '+IntToStr(MyArray[i])+'!');
Exit;
end else MySet:=MySet+[MyArray[i]];
end;
end;