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;