var array: [Int] = []
//Here I make an array to try to dictate when to perform an IBaction.
func random() -> Int {
let rand = arc4random_uniform(52)*10+10
return Int(rand)
}
//this function makes a random integer for me
func finalRand() -> Int {
var num = random()
while (array.contains(num) == true){
if (num == 520){
num = 10
}else {
num += 10
}
}
array.append(num)
return num
}
while语句中的逻辑有些混乱,但是您可以尝试以下操作:
var array:Array<Int> = []
func finalRand() -> Int {
var num = Int(arc4random_uniform(52)*10+10)
while array.contains(num) {
num = Int(arc4random_uniform(52)*10+10)
}
array.append(num)
return num
}
这样,永远不会重复,您的锅炉代码较少。
可能有一个更好的方法涉及集,但对不起,我对此并不了解。
几件事:
-
一旦您的数组具有所有52个值,尝试添加53个数字的尝试将最终进入无限循环,因为所有52个值已经在您的数组中。
-
在当代Swift版本中,您可以将
random
例程简化为func random() -> Int { return Int.random(in: 1...52) * 10 }
-
看来,您可能需要一个52个不同值的洗牌数组,您可以将其简化为:
let array = Array(1...52).map { $0 * 10 } .shuffled()
只是通过那个洗牌阵列迭代。
如果完成所有值后,您确实需要继续生成数字,例如,您可以重新封装数组,并从新降落的数组的开头开始。
-
顺便说一句,您的例程不会生成真正的随机序列。例如,让我们想象您的代码恰好填充了值10到500,其中只有510和520是最终可能的剩余值:您的例程是下一个值的510倍以510生成510的可能性。您想像内置的
shuffled
例行程序一样进行渔民山的混音,以产生一系列真正均匀分布的值。只是生成可能的值的数组并将其洗牌。