Swift:在多个范围之间生成随机数

时间:2019-04-15 18:09:32

标签: swift random range

我想生成一个可以在之间的随机数

-3...-83...8

我知道我可以找到一种回旋方式,方法是先在0到1之间随机选择一个整数,然后选择范围:

let zeroOrOne = CGFloat.random(in: 0...1)
if zeroOrOne == 0 {
    randomNum = CGFloat.random(in: -3...-8)
} else {
    randomNum = CGFloat.random(in: 3...8)
}

但是我想知道是否有更好的方法可以做到这一点。

2 个答案:

答案 0 :(得分:2)

我确定您要使用Bool.random

一种书写方式是

let randomNum = CGFloat.random(in: 3...8) * (Bool.random() ? 1 : -1)

var randomNum = CGFloat.random(in: 3...8)
if Bool.random() {
   randomNum.negate()
}

没有一个正确的解决方案。

答案 1 :(得分:1)

有一个general solution用于在几个不重叠的范围内生成随机整数。

  1. 查找每个范围内的整数数;这就是该范围的权重(例如,如果每个范围都是一个封闭的间隔[x, y],则此权重就是(y - x) + 1)。
  2. 根据范围的权重随机选择一个范围(有关如何在Swift中完成此操作,请参见this question
  3. 生成一个选定范围内的随机整数:CGFloat.random(in: range)