Method: Enumerable#random

Defined in:
lib/extra/enumerable.rb

#random(how_many = 1) ⇒ Object

Get a random element from the array.

Example: [:a, :b, :c].random #=> :b

Returns: Random object(s) or nil.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/extra/enumerable.rb', line 29

def random(how_many = 1)
  objects = {}
  array   = to_a

  # Let's just skip to nil if more than existent entries was requested.
  return if array.size < how_many

  # This is a longer, more efficient way than sorting the entire array.
  how_many.times do
    index = rand(array.size)
    redo if objects.keys.include? index
    objects[index] = array[index]
  end

  how_many == 1 ? objects.values[0] : objects.values
end