我想生成一个可以介于两者之间的随机数
-3...-8
和3...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)
}
但我想知道是否有更好的方法来做到这一点。
有一个general solution用于在几个非重叠范围内生成随机整数。
[x, y]
,则该权重是(y - x) + 1
)。CGFloat.random(in: range)
。我相信你想要使用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()
}
没有一个正确的解决方案。