我想从数字范围返回随机数。返回号码只会返回一次,直到所有号码都返回。
我正在使用以下代码生成随机数,但是额外我只需要获取一次数字吗?
功能:
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 :(得分:1)
此函数创建一个数组,其中包含从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)")
}
}