Случайные числа ruby
Самым простым способом получить случайное число в Ruby является использование метода rand.
puts rand() #0.7063893161805139
puts rand() #0.5829631459496872
puts rand() #0.7625800525759028
Получение случайных чисел с плавающей точкой редко бывает полезным, чаще всего необходимо целое число.
puts rand(3) #0
puts rand(3) #1
puts rand(3) #1
puts rand(10) #3
puts rand(10) #7
puts rand(10) #8
Если методу rand передать в качестве аргумента целое число, то rand будет генерировать случайные числа в диапазоне от 0 до n-1.
Что делать, если необходимо сгенерировать число в диапазоне, где минимум не ноль?
Random.rand #0.5972754026687639
Random.rand(10) #9
rnd = Random.new
rnd.rand #0.9603713013025631
rnd.rand(10) #7
rnd.rand(10..100) #44
Передавая в качестве аргумента диапазон в метод Random#rand мы получаем случайное целое число из диапазона.
rnd.rand(0.0 .. 9.0) #6.569607064916773
Получение случайного элемента массива:
arr[rand(arr.size)] #3
arr[rand(arr.size)] #13
SecureRandom
SecureRandom - это библиотека представляет собой интерфейс для надежного генератора случайных чисел, который предназначен для генерации session ключа в HTTP cookies.
Для подключения модуля к проекту нужно использовать active_support.
require "active_support"
Использование:
SecureRandom.class #=> Module
Полезные методы:
#hex - метод генерирует случайную строку 16ричными значениями( 0-9 и a-f)
SecureRandom.hex(10) #=> "e928eda0c2ee334954f1"
SecureRandom.hex(13) #=> "ee011e639961d793ccd9b044f7"
#random_bytes - метод генерирует случайную бинарную строку
SecureRandom.random_bytes #=> "\xDEg1\x18\xD7\x05\x87\xB9\xE2\xB8]\xC79'\x9A\xAC"
#random_number - метод генерирует случайное число, типа integer или float
SecureRandom.random_number(100) #=> 32
SecureRandom.random_number #=> 0.23232132331
#urlsafe_base64 - метод генерирует случайную url строку
SecureRandom.urlsafe_base64 #=> "_s-6CfjfGXd5JlHLb6D26g"
#uuid - метод генерирует случайный универсальный идентификатор UUID (Universally Unique IDentifier).
p SecureRandom.uuid #=> "d8f2faee-d74b-4ea1-afdb-a755111222cf"