Как получить случайное число в Ruby

Если ваше конечное время и время начала не находятся в пределах секунды от eachother, вы можете отбрасывать свои отметки времени как даты и выполнять арифметику даты:

select avg(cast(endtime as date)-cast(starttime as date))*24*60*60 
  from timings;
766
задан techdreams 18 September 2018 в 09:14
поделиться

5 ответов

Используйте rand(range)

От [1 119] Случайные числа Ruby :

, Если бы Вам было нужно случайное целое число для моделирования списка шестистороннего, умирают, Вы использовали бы: 1 + rand(6). Список в костях мог быть моделирован с 2 + rand(6) + rand(6).

Наконец, если Вам просто нужно случайное плавание, просто вызов rand без аргументов.

<час>

Как [1 120] Marc-AndrГ© Lafortune упоминает в [1 121] его ответ ниже (пойдите upvote это) , Ruby 1.9.2 имеет свое собственное Random класс (который сам Marc-AndrГ© помог отладить , следовательно 1.9.2 целей для той функции).

, Например, в этом игра, где необходимо предположить 10 чисел , можно инициализировать их с:

10.times.map{ 20 + Random.rand(11) } 
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]

Примечание:

, Поэтому эквивалент [1 114] был бы 20 + Random.rand(11), с тех пор Random.rand(int) возвраты “a случайное целое число, больше, чем или равен нулю и меньше, чем аргумент .” 20..30 включает 30, я должен придумать случайное число между 0 и 11, исключая 11.

936
ответ дан thumbtackthief 18 September 2018 в 09:14
поделиться

Не забывайте отбирать RNG с srand () сначала.

0
ответ дан Liebach 18 September 2018 в 09:14
поделиться

Ну, я понял его. По-видимому, существует встроенная (?) функция, вызванная рэнд:

rand(n + 1)

, Если кто-то отвечает более подробным ответом, я отмечу это как корректный ответ.

21
ответ дан Mark A. Nicolosi 18 September 2018 в 09:14
поделиться

На рубиновом языке у нас есть метод как rand(). Можно генерировать случайное число с помощью этого метода. rand() метод будет иметь только целочисленный аргумент или диапазон. Тип возврата этого метода является случайным целым числом.

 rand()          # This Will generates a random number between 0.0 to 1.0
 rand(10)        # This Will generates a number between 0 to 10
 rand(1 .. 9)    # This Will generates a number between 1 to 10
 rand(1 ... 10)  # This Will generates a number between 2 to 9

ПРИМЕЧАНИЕ: числа, произведенные rand(), достаточно для простые приложения.

, Но если Вам нужен он в целях безопасности, как генерация одноразового пароля, создавая маркеры сброса пароля, тогда необходимо использовать одну из части библиотеки стандарта Ruby, которая является SecureRandom.

require 'securerandom'

SecureRandom.random_number
=> 0.232

SecureRandom.random_number(100)
=> 72

SecureRandom.hex
=> "87694e9e5231aba6ssdfs3de39c58cdfbe307"
2
ответ дан Mr. Stranage 29 August 2019 в 16:58
поделиться
  • 1
    @Andreas_D. Спасибо за указание на него, добавил hated ручное удаление функции. – Alexander Pogrebnyak 1 July 2013 в 16:09

Хотя вы можете используйте rand (42-10) + 10 , чтобы получить случайное число между 10 и 42 (где 10 включает и 42 исключая), есть лучший способ начиная с Ruby 1.9.3, где вы можете вызвать:

rand(10...42) # => 13

Доступно для всех версий Ruby, требуя мой гем backports .

Ruby 1.9.2 также представил класс Random , так что вы можете создавать свои собственные объекты генератора случайных чисел и имеет хороший API:

r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"

Сам класс Random действует как генератор случайных чисел, поэтому вы вызываете напрямую:

Random.rand(10...42) # => same as rand(10...42)

Примечания к Random.new

В большинстве случаев самым простым является использование rand или Random.rand . Создание нового генератора случайных чисел каждый раз, когда вы хотите получить случайное число, - это действительно плохая идея . Если вы сделаете это, вы получите случайные свойства алгоритма начального заполнения, которые ужасны по сравнению со свойствами самого генератора случайных чисел .

Если вы используете Random.new , вы должны как можно реже называть его , например, один раз как MyApp :: Random = Random.new и используйте его везде.

Случаи, когда Random.new полезны, следующие:

  • вы пишете драгоценный камень и не хотите вмешиваться в последовательность rand / Random. И , что основные программы могут полагаться на
  • вам нужны отдельные воспроизводимые последовательности случайных чисел (скажем, по одной на поток)
  • вы хотите сохранить и возобновить воспроизводимую последовательность случайных чисел (просто, как Случайные объекты можно упорядочить)
589
ответ дан 22 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: