Kaz*_*mun 1 random arc4random swift
我想编写一个应该返回整数列表的函数。整数列表大小和最大随机数将由用户定义,用户将通过函数参数传递。我的特殊要求是,列表中的整数不能是多余的。
我的方法使用Array:
func getRandomNumbers(maxNumber: Int, listSize: Int)-> [Int]{
var randomNumbers = [Int]()
for _ in 1...listSize{
let randomNumber = Int(arc4random_uniform(UInt32(listSize)))
randomNumbers.append(randomNumber)
}
return randomNumbers
}
Run Code Online (Sandbox Code Playgroud)
问题:有时我用这种方法得到重复的值。
我知道 swiftSet不具有重复值。
我的方法使用Set:
func getRandomNumbers(maxNumber: Int, listSize: Int)-> Set<Int>{
var randomNumbers = Set<Int>()
for _ in 1...listSize{
let randomNumber = Int(arc4random_uniform(UInt32(listSize)))
randomNumbers.insert(randomNumber)
}
return randomNumbers
}
Run Code Online (Sandbox Code Playgroud)
问题:有时Set尺寸小于用户定义的尺寸。
Swift 5 版本实现
extension Int {
static func getUniqueRandomNumbers(min: Int, max: Int, count: Int) -> [Int] {
var set = Set<Int>()
while set.count < count {
set.insert(Int.random(in: min...max))
}
return Array(set)
}
}
Run Code Online (Sandbox Code Playgroud)
例如:
let uniqueNumbers = Int.getUniqueRandomNumbers(min: 1000, max: 1500, count: 10)
Run Code Online (Sandbox Code Playgroud)
结果示例:
[1454, 1105, 1305, 1176, 1498, 1127, 1310, 1209, 1373, 1198]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5151 次 |
| 最近记录: |