class Array

Public Instance Methods

sample(arr = nil) click to toggle source
# File lib/extensions/array.rb, line 3
def sample(arr = nil)
  # based on code from https://github.com/marcandre/backports
  size = length
  return self[Kernel.rand(size)] if arr.nil?

  arr = arr.to_int
  raise ArgumentError, 'negative array size' if arr < 0

  arr = size if arr > size

  result = Array.new(self)
  arr.times do |i|
    r = i + Kernel.rand(size - i)
    result[i], result[r] = result[r], result[i]
  end
  result[arr..size] = []
  result
end