2014-09-11 89 views
-1

如標題所示,我有一個20個整數的數組。每次我生成一個新的隨機數,我想檢查它是否已經包含在數組中。如果該數字存在於數組中,我想重新生成一個隨機數並重新從數組開始重新檢查數組。最後,我的20個整數數組應該包含7到30之間的所有唯一值。我已經創建了一個完美的代碼混亂。感謝來自這裏的專家的一些幫助。非常感謝。如何確保一個數組只包含唯一的數字在vba中

Dim Low, High, tmpNo As Double 
Dim myarray(20) As Integer 
Dim i, x As Integer 

Low = 7 
High = 30 
i = 0 
x = 0 

For i = 0 To 19 
    tmpno = Int((High - Low + 1) * Rnd() + Low) 
    If i = 0 Then 
    myarray(i) = tmpno 
    tmpno = Int((High - Low + 1) * Rnd() + Low) 
    End If 

    For x = 0 To Len(i) 
    If tmpno = myarray(x) Then 
     tmpno = Int((High - Low + 1) * Rnd() + Low) 
     x = 0 
    Else 
     If myarray(x + 1) = 0 Then 
      myarray(x + 1) = tmpno 
      tmpno = Int((High - Low + 1) * Rnd() + Low) 
      x = 0 
     End If 
    End If 
    Next 
Next 
+1

而不是產生,檢測DUP並重,我建議你做一個洗牌代替。從低到高填充一個數組,然後洗牌,然後取前20個元素。 – 2014-09-11 06:36:01

+0

感謝您的提示。我想這應該做的竅門整潔...現在要弄清楚如何洗牌陣列。 – schenker 2014-09-11 13:05:30

+0

請參閱[此答案](http://stackoverflow.com/a/18543399/445425)。請注意Webb偏見的評論和鏈接 – 2014-09-11 14:33:38

回答

0

您使用字典而不是數組。您只設置密鑰。您無法添加重複密鑰,因此請使用On Error Resume NextIf err.number <> 0 then ...

錯誤進行測試Dictionary對象與PERL關聯數組等效。項目可以是任何形式的數據,並存儲在數組中。每個項目都與一個唯一的關鍵字相關聯。該鍵用於檢索單個項目,通常爲整數或字符串,但可以是除數組之外的任何項目。

下面的代碼演示瞭如何創建Dictionary對象:

Visual Basic Script Copy Code 
Dim d ' Create a variable. 

Set d = CreateObject("Scripting.Dictionary") 

d.Add "a", "Athens" ' Add some keys and items. 

d.Add "b", "Belgrade" 

d.Add "c", "Cairo" 

... 
相關問題