How to get Random Number from an array in Ruby with examples
This tutorial shows, multiple ways to get a random number from an array. One way is using the sample method, another way using shuffle.first and another way using retrieve an array with index, where index value generated using rand function.
You can get single or multiple random values from a given array.
Generate Random Number with Array sample method
An array contains the sample
method which returns random values. It accepts optional arguments.
It was introduced in the Ruby 1.9.1 version, you can use the array. choice
method below 1.9.1 version.
Syntax:
Array.sample[(count)]
The argument is optional.
Without arguments, It returns a single random value from an array. Arguments contain the number of elements to be returned from an array.
Here is an example
numberWords = ["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten" ]
# argument 2 returns the two random values
puts numberWords.sample(2)
# sample method without argument return one element from array
puts numberWords.sample
Output:
nine
two
five
It is always better to supply the argument less than the array size. It gives duplicate values if the argument is greater than the array size.
In the below example, the count is 11 and the array size is 10, so element five is repeated twice.
numberWords = ["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten" ]
# argument 11 returns the 11 random values
puts numberWords.sample(11)
Output:
ten
seven
six
nine
five
four
three
one
two
eight
five
Get Random values from an array shuffle
Array provides a shuffle
method that shuffles the array of elements and returns the elements. It accepts optional arguments.
Syntax:
Array.shuffle()
or
Array.shuffle(random:range)
The argument is optional.
Without arguments, It returns a new array by shuffling all elements and returns it. Arguments contain the random range of values to be returned from an array.
Here is an example
numberWords = ["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten" ]
# shuffle method without argument returns a new array of elements with shuffled
puts numberWords.shuffle
Output:
three
ten
seven
five
one
four
two
eight
nine
six
with a range of random generator arguments,
numberWords = ["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten" ]
# argument random used random generator logic and return an array
puts numberWords.shuffle(random: Random.new(1))
Output:
three
ten
seven
five
one
four
two
eight
nine
six
if you want to return a single random value, You can use shuffle.first property.
numberWords = ["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten" ]
# returns single random value from an array
puts numberWords.shuffle.first
Output:
four
Random elementn from an array with a random index
rand method returns the number with a range of supplied values, if the array size is passed, It returns a random value between 0 to the length of an array, by passing this value as an index to retrieve the element.
Here is an example
numberWords = ["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten" ]
# returns single random value from an array
puts numberWords[rand(numberWords.count)]
Output:
two
Conclusion
To summarize, Three options are listed to retrieve random values from an array. you can choose anything based on your need.