我想从数字范围返回随机数。返回编号将只有一次,直到所有编号返回为止。
我正在使用以下代码来生成随机数,但是我还要做额外的操作才能仅获得一次?
功能:
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)")
}
}
关于ios - 从范围内仅获取一次随机数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33820031/