Return a random element of the array.
[1, 2, 3, 4].at_rand #=> 2 [1, 2, 3, 4].at_rand #=> 4
[ show source ]
# File lib/more/facets/random.rb, line 104 def at_rand self.at( rand( size ) ) end
Same as at_rand, but acts in place removing a random element from the array.
a = [1,2,3,4] a.at_rand! #=> 2 a #=> [1,3,4]
[ show source ]
# File lib/more/facets/random.rb, line 115 def at_rand! return delete_at( Random.number( size ) ) end
Similar to at_rand, but will return an array of randomly picked exclusive elements if given a number.
[ show source ]
# File lib/more/facets/random.rb, line 121 def pick(n=nil) if n a = self.dup a.pick!(n) else at( Random.number( size ) ) end end
Similar to at_rand!, but given a number will return an array of exclusive elements.
[ show source ]
# File lib/more/facets/random.rb, line 132 def pick!(n=nil) if n if n > self.size r = self.dup self.replace([]) r else r = [] n.times { r << delete_at( Random.number( size ) ) } r end else delete_at( Random.number( size ) ) end end
Random index.
[ show source ]
# File lib/more/facets/random.rb, line 150 def rand_index rand( size ) end
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]
[ show source ]
# File lib/more/facets/random.rb, line 172 def rand_subset( number=nil, exclusive=true ) number = rand( 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 << rand( size ) } return values_at(*ri) end
Randomize the order of an array.
[1,2,3,4].shuffle #=> [2,4,1,3]
[ show source ]
# File lib/more/facets/random.rb, line 185 def shuffle dup.shuffle! #sort_by{Random.number} end
As with shuffle but modifies the array in place. The algorithm used here is known as a Fisher-Yates shuffle.
a = [1,2,3,4] a.shuffle! a #=> [2,4,1,3]
CREDIT Niel Spring
[ show source ]
# File lib/more/facets/random.rb, line 199 def shuffle! s = size each_index do |j| i = Random.number(s-j) #self[j], self[j+i] = self[j+i], self[j] tmp = self[j] self[j] = self[j+i] self[j+i] = tmp end self end