TArrayInt = Array Of Integer; //自定义整数数组
Function GetRandomIntArray(SrcArray: TArrayInt; Var DestArray: TArrayInt;
CntDest: integer): Boolean;
Var
i, j, lRnd, lCntSrc: integer;
Begin
Try
If CntDest <= 0 Then
CntDest := high(SrcArray);
lCntSrc := high(SrcArray);
setlength(DestArray, CntDest);
CntDest := CntDest - 1;
For i := 0 To CntDest Do
DestArray[i] := 0;
{If lCntDest >= lCntSrc Then
Begin
For i := 0 To lCntSrc Do
DestArray[i] := SrcArray[i];
result := true;
exit;
End;
}
If CntDest > lCntSrc Then //个数相同作乱序处理
CntDest := lCntSrc;
{第一次从 SrcArray[0] ~ SrcArray[lCntSrc]中任意选择一个数,作为第一个数;
剔除此数,把最末一个数SrcArray[lCntSrc]添到这个位置;
第二次从SrcArray[0] ~ SrcArray[lCntSrc-1]中任意选择一个数,作为第二个数;
剔除此数,把最末一个数SrcArray[lCntSrc-1]添到这个位置;}
j := -1;
For i := 0 To CntDest Do
Begin
lRnd := Random(lCntSrc + 1 - i);
j := j + 1;
DestArray[j] := SrcArray[lRnd];
SrcArray[lRnd] := SrcArray[lCntSrc - i];
End;
result := true;
Except
On e: exception Do
Begin
Raise Exception.Create('uCommonOperate.GetRandomIntArray ' + e.Message);
End;
End;
End;