簡體   English   中英

Swift:在多個范圍之間生成隨機數

[英]Swift: Generate random number between multiple ranges

我想生成一個介於

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

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

我確定您要使用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. 查找每個范圍內的整數數; 這就是該范圍的權重(例如,如果每個范圍是一個閉合區間[x, y] ,則該權重為(y - x) + 1 )。
  2. 根據范圍的權重隨機選擇一個范圍(有關如何在Swift中完成此操作,請參閱此問題 )。
  3. 生成所選范圍內的隨機整數: CGFloat.random(in: range)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM