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

问题描述 投票:0回答:2

我想生成一个可以介于两者之间的随机数

-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)
}

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

swift random range
2个回答
1
投票

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

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

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()
}

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

© www.soinside.com 2019 - 2024. All rights reserved.