我想从数字范围中返回随机数。在返回所有编号之前,返回编号将仅为一次。
我使用以下代码生成随机数,但我必须做额外的事情才能得到一次数字?
功能:
func randomNumber(range: Range<Int> = 1...3) -> Int {
let min = range.startIndex
let max = range.endIndex
return Int(arc4random_uniform(UInt32(max - min))) + min
}
呼叫:
var ran = randomNumber(0...36)
输出:
ran: 30
ran: 16
ran: 0
ran: 14
ran: 18
ran: 7
ran: 20
ran: 13
ran: 26
ran: 26
ran: 3
ran: 12
ran: 35
ran: 27
ran: 0
ran: 5
ran: 5
ran: 3
请告诉我要做什么改变。
此函数创建一个数组,其中包含从0到最大值(在您的情况下为36)的所有数字。然后,它复制数组,并从复制的数组中获取随机索引。拾取该数字后,它将从复制的阵列中删除。只要原始数组中有数字,就重复多次。
func random(max: Int) {
var numbers = [Int]()
for x in 0...max {
numbers.append(x)
}
var numbersCopy = numbers
for _ in 0..<numbers.count {
let randomIndex = Int(arc4random_uniform(UInt32(numbersCopy.count)))
let result = numbersCopy.removeAtIndex(randomIndex)
print("Random Number: (result)")
}
}