RDRubyTutorial: Случайные числа в Ruby

декабря 28, 2011  |  Published in Ruby, Основы  |  1 Comment

В этой статье из цикла RubyDev Ruby Tutorial мы рассмотрим способы генерации случайного числа в Ruby 1.8.x и Ruby 1.9.x. Генерация случайного числа — достаточно тривиальная задача, особенно для Ruby однако некоторые новички даже здесь сталкиваются с проблемами. Кроме того, не все программисты знают о нововведениях в Ruby 1.9 связанных с генерацией случайных чисел.

Самым простым способом получить случайное число в 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.

Что делать, если необходимо сгенерировать число в диапазоне, где минимум не ноль? В Ruby 1.8 у нас есть только один выход:

puts rand(10) + 10 #15
puts rand(10) + 10 #12
puts rand(10) + 10 #10

В таком случае мы генерируем числа от 10 до 19 включительно.

Ruby 1.9 предоставляется другое решение — специальный класс Random:

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

MonkeyPatching way:

class Array
  def rand_elem
    self[rand(size)]
  end
end

puts [1,1,2,3,5,7,11,13].rand_elem #11

Успехов вам в изучении программирования на Ruby!

Tags: ,

Responses

  1. Pavel says:

    декабря 29, 2011 at 19:08 (#)

    array.sample() вам в помощь =)

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.