Return a random element from the array.
[1, 2, 3, 4].at_rand #=> 2 [1, 2, 3, 4].at_rand #=> 4
# File lib/more/facets/random.rb, line 141 141: def at_rand 142: at(Random.number(size)) 143: end
Same as #, but acts in place removing a random element from the array.
a = [1,2,3,4] a.at_rand! #=> 2 a #=> [1,3,4]
# File lib/more/facets/random.rb, line 152 152: def at_rand! 153: return delete_at( Random.number( size ) ) 154: end
Similar to #, but will return an array of randomly picked exclusive elements if given a number.
# File lib/more/facets/random.rb, line 158 158: def pick(n=nil) 159: if n 160: a = self.dup 161: a.pick!(n) 162: else 163: at(Random.number(size)) 164: end 165: end
Similar to #, but given a number will return an array of exclusive elements.
# File lib/more/facets/random.rb, line 169 169: def pick!(n=nil) 170: if n 171: if n > self.size 172: r = self.dup 173: self.replace([]) 174: r 175: else 176: r = [] 177: n.times { r << delete_at(Random.number(size)) } 178: r 179: end 180: else 181: delete_at(Random.number(size)) 182: end 183: end
Random index.
# File lib/more/facets/random.rb, line 187 187: def rand_index 188: Random.number(size) 189: 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]
# File lib/more/facets/random.rb, line 209 209: def rand_subset( number=nil, exclusive=true ) 210: number = Random.number(size) unless number 211: number = number.to_int 212: #return self.dup if (number >= size and exlusive) 213: return sort_by{rand}.slice(0,number) if exclusive 214: ri =[]; number.times { |n| ri << Random.number(size) } 215: return values_at(*ri) 216: end
Randomize the order of an array.
[1,2,3,4].shuffle #=> [2,4,1,3]
# File lib/more/facets/random.rb, line 222 222: def shuffle 223: dup.shuffle! 224: #sort_by{Random.number} 225: end
As with # 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
# File lib/more/facets/random.rb, line 236 236: def shuffle! 237: s = size 238: each_index do |j| 239: i = Random.number(s-j) 240: #self[j], self[j+i] = self[j+i], self[j] 241: tmp = self[j] 242: self[j] = self[j+i] 243: self[j+i] = tmp 244: end 245: self 246: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.