從源數組中取不同的隨機數

 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;

 

發佈了45 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章