2014-10-20 105 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