2014-10-20 108 views
2

如何在0到31之間生成隨機數字,而無需在Swift語言中調用兩次數字?如何在Swift中生成沒有重複的隨機數字?

+0

「撥打號碼」是什麼意思? – recursive 2014-10-20 02:15:18

+0

我的意思是如果隨機數是5,它不會在方法 – Fahad 2014-10-20 02:16:43

+0

中再次重複5看起來像http://stackoverflow.com/questions/196017/unique-non-repeating-random-numbers-in- o1 – Lance 2014-10-20 02:31:21

回答

2

您可以創建一個返回一個隨機數發生器關閉,這樣的功能:

func randomSequenceGenerator(#min: Int, #max: Int) ->() -> Int { 
    var numbers: [Int] = [] 
    return { 
     if numbers.count == 0 { 
      numbers = Array(min ... max) 
     } 

     let index = Int(arc4random_uniform(UInt32(numbers.count))) 
     return numbers.removeAtIndex(index) 
    } 
} 

要使用它,首先調用生成器一次以創建隨機序列發生器,然後調用返回值很多次,只要你喜歡。這將打印出一到六之間的隨機值,在重新開始之前循環遍歷所有值:

let getRandom = randomSequenceGenerator(min: 1, max: 6) 
for _ in 1...20 { 
    println(getRandom()) 
} 
+0

http://s17.postimg.org/pz2vbd98v/Screen_Shot_2014_10_20_at_05_26_13.png – Fahad 2014-10-20 02:30:45

+0

http://s17.postimg.org/pz2vbd98v/Screen_Shot_2014_10_20_at_05_26_13.png 它確實重複我希望它沒有重複的數字。事實上,我有撲克牌,我希望它們在4個UIImage中同樣出現,而不會將它們全部複製到一個數組中@NateCook – Fahad 2014-10-20 02:39:41

+0

它只是重複數字,因爲他調用的次數多於數組中的項目。請注意,他以隨機順序生成數字1-6,當他生成數字7-12時,他又以隨機順序生成數字1-6等。 – Rob 2014-10-20 02:44:15