Method: Array#sample

Defined in:
lib/vendor/backports-3.3.5/lib/backports/1.9.1/array/sample.rb

#sample(n = Backports::Undefined) ⇒ Object

Raises:

  • (ArgumentError)


5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/vendor/backports-3.3.5/lib/backports/1.9.1/array/sample.rb', line 5

def sample(n = Backports::Undefined)
  return self[Kernel.rand(size)] if n == Backports::Undefined
  n = Backports.coerce_to_int(n)
  raise ArgumentError, "negative array size" if n < 0
  n = size if n > size
  result = Array.new(self)
  n.times do |i|
    r = i + Kernel.rand(size - i)
    result[i], result[r] = result[r], result[i]
  end
  result[n..size] = []
  result
end