Method: Random::ArrayExtensions#rand_subset

Defined in:
lib/standard/facets/random.rb

#rand_subset(number = nil, exclusive = true) ⇒ Object

Returns a random subset of an Array. If a number of elements is specified then returns that number of elements, otherwise returns a random number of elements upto the size of the Array.

By defualt the returned values are exclusive of each other, but if exclusive is set to false, the same values can be choosen more than once.

When exclusive is true (the default) and the number given is greater than the size of the array, then all values are returned.

[1, 2, 3, 4].rand_subset(1)        #~> [2]
[1, 2, 3, 4].rand_subset(4)        #~> [2, 1, 3, 4]
[1, 2, 3, 4].rand_subset           #~> [1, 3, 4]
[1, 2, 3, 4].rand_subset           #~> [2, 3]


196
197
198
199
200
201
202
203
# File 'lib/standard/facets/random.rb', line 196

def rand_subset( number=nil, exclusive=true )
  number = Random.number(size) unless number
  number = number.to_int
  #return self.dup if (number >= size and exlusive)
  return sort_by{rand}.slice(0,number) if exclusive
  ri =[]; number.times { |n| ri << Random.number(size) }
  return values_at(*ri)
end