Random::Array

Public Instance Methods

at_rand() click to toggle source

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
at_rand!() click to toggle source

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
pick(n=nil) click to toggle source

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
pick!(n=nil) click to toggle source

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
rand_index() click to toggle source

Random index.

     # File lib/more/facets/random.rb, line 187
187:     def rand_index
188:       Random.number(size)
189:     end
rand_subset( number=nil, exclusive=true ) click to toggle source

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
shuffle() click to toggle source

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
shuffle!() click to toggle source

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.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.