Swift: генерировать случайное число между несколькими диапазонами - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу сгенерировать случайное число, которое может быть между

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

, но мне интересно, есть ли лучший способ сделать это.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Я уверен, что вы хотите использовать 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 голос
/ 25 апреля 2019

Существует общее решение для генерации случайного целого числа в нескольких неперекрывающихся диапазонах.

  1. Найти количество целых чисел в каждом диапазоне;это вес этого диапазона (например, если каждый диапазон является закрытым интервалом [x, y], этот вес равен (y - x) + 1).
  2. Выберите диапазон случайным образом в соответствии с весами диапазонов (см. этот вопрос (как это можно сделать в Swift).
  3. Генерирует случайное целое число в выбранном диапазоне: CGFloat.random(in: range).
...