Module: Random::Array
- Defined in:
- lib/gems/facets-2.4.5/lib/more/facets/random.rb
Instance Method Summary collapse
-
#at_rand ⇒ Object
Return a random element of the array.
-
#at_rand! ⇒ Object
Same as #at_rand, but acts in place removing a random element from the array.
-
#pick(n = nil) ⇒ Object
Similar to #at_rand, but will return an array of randomly picked exclusive elements if given a number.
-
#pick!(n = nil) ⇒ Object
Similar to #at_rand!, but given a number will return an array of exclusive elements.
-
#rand_index ⇒ Object
Random index.
-
#rand_subset(number = nil, exclusive = true) ⇒ Object
Returns a random subset of an Array.
-
#shuffle ⇒ Object
Randomize the order of an array.
-
#shuffle! ⇒ Object
As with #shuffle but modifies the array in place.
Instance Method Details
#at_rand ⇒ Object
Return a random element of the array.
[1, 2, 3, 4].at_rand #=> 2
[1, 2, 3, 4].at_rand #=> 4
107 108 109 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 107 def at_rand at(Random.number(size)) end |
#at_rand! ⇒ Object
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]
118 119 120 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 118 def at_rand! return delete_at( Random.number( size ) ) end |
#pick(n = nil) ⇒ Object
Similar to #at_rand, but will return an array of randomly picked exclusive elements if given a number.
124 125 126 127 128 129 130 131 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 124 def pick(n=nil) if n a = self.dup a.pick!(n) else at(Random.number(size)) end end |
#pick!(n = nil) ⇒ Object
Similar to #at_rand!, but given a number will return an array of exclusive elements.
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 135 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 |
#rand_index ⇒ Object
Random index.
153 154 155 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 153 def rand_index Random.number(size) end |
#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]
175 176 177 178 179 180 181 182 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 175 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 |
#shuffle ⇒ Object
Randomize the order of an array.
[1,2,3,4].shuffle #=> [2,4,1,3]
188 189 190 191 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 188 def shuffle dup.shuffle! #sort_by{Random.number} end |
#shuffle! ⇒ Object
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
202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/gems/facets-2.4.5/lib/more/facets/random.rb', line 202 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 |