arrays - 返回一个范围内的整数数组

标签 arrays swift random swift3

我对 Swift 很陌生,想创建一个返回随机整数数组的函数,所有整数都在指定范围内。这是我想出的,但对我来说感觉不是很“swift ”。精通 Swift 的人会采取不同的方法吗?

func randomNumber(range: ClosedRange<Int>) -> Int {
  let min = range.lowerBound
  let max = range.upperBound
  return Int(arc4random_uniform(UInt32(1 + max - min))) + min
}

func randomNumbers(range: ClosedRange<Int>, count: Int) -> [Int] {
  var array = [Int]()

  for _ in 0..<count {
    let n = randomNumber(range: range)
    array.append(n)
  }

  return array
}

let nums = randomNumbers(range: 10...20, count: 5)

最佳答案

函数randomNumber()昂贵效率不高,因为minmax在每次调用中都被提取(又名在循环的每次迭代中)

这可能会更快一些

func randomNumbers(range: ClosedRange<Int>, count: Int) -> [Int] {
    let min = range.lowerBound
    let randomMax = UInt32(1 + range.upperBound - min)
    return (0..<count).map {_ in return Int(arc4random_uniform(randomMax)) + min }
}

let nums = randomNumbers(range: 10...20, count: 5)

关于arrays - 返回一个范围内的整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42517449/

相关文章:

objective-c - 变长c数组

php - 将数组位转换为实际图像

ios - pod update --verbose & pod install --verbose 未完成,挂起

ios - 查看不向上移动自定义键盘高度 - swift

random - sparql:为每个节点随机选择一个连接

生成唯一(可能自动递增)ID 的算法

java - 我想向后打印字符串数组元素?

javascript - 为什么 AngularJS ng-model 返回 [object%20Object] 作为值而不是选项值(整数)?

ios - Swift Firebase UITableViewCell 在填充单元格的数据可用之前加载

javascript - 动画理论(自然动画)