Permalink
Cannot retrieve contributors at this time
69 lines (67 sloc)
2.4 KB
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Array | |
# call-seq: | |
# array.shuffle!(random: Random) -> array | |
# | |
# Shuffles the elements of +self+ in place. | |
# a = [1, 2, 3] #=> [1, 2, 3] | |
# a.shuffle! #=> [2, 3, 1] | |
# a #=> [2, 3, 1] | |
# | |
# The optional +random+ argument will be used as the random number generator: | |
# a.shuffle!(random: Random.new(1)) #=> [1, 3, 2] | |
def shuffle!(random: Random) | |
Primitive.rb_ary_shuffle_bang(random) | |
end | |
# call-seq: | |
# array.shuffle(random: Random) -> new_ary | |
# | |
# Returns a new array with elements of +self+ shuffled. | |
# a = [1, 2, 3] #=> [1, 2, 3] | |
# a.shuffle #=> [2, 3, 1] | |
# a #=> [1, 2, 3] | |
# | |
# The optional +random+ argument will be used as the random number generator: | |
# a.shuffle(random: Random.new(1)) #=> [1, 3, 2] | |
def shuffle(random: Random) | |
Primitive.rb_ary_shuffle(random) | |
end | |
# call-seq: | |
# array.sample(random: Random) -> object | |
# array.sample(n, random: Random) -> new_ary | |
# | |
# Returns random elements from +self+. | |
# | |
# When no arguments are given, returns a random element from +self+: | |
# a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |
# a.sample # => 3 | |
# a.sample # => 8 | |
# If +self+ is empty, returns +nil+. | |
# | |
# When argument +n+ is given, returns a new \Array containing +n+ random | |
# elements from +self+: | |
# a.sample(3) # => [8, 9, 2] | |
# a.sample(6) # => [9, 6, 10, 3, 1, 4] | |
# Returns no more than <tt>a.size</tt> elements | |
# (because no new duplicates are introduced): | |
# a.sample(a.size * 2) # => [6, 4, 1, 8, 5, 9, 10, 2, 3, 7] | |
# But +self+ may contain duplicates: | |
# a = [1, 1, 1, 2, 2, 3] | |
# a.sample(a.size * 2) # => [1, 1, 3, 2, 1, 2] | |
# The argument +n+ must be a non-negative numeric value. | |
# The order of the result array is unrelated to the order of +self+. | |
# Returns a new empty \Array if +self+ is empty. | |
# | |
# The optional +random+ argument will be used as the random number generator: | |
# a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |
# a.sample(random: Random.new(1)) #=> 6 | |
# a.sample(4, random: Random.new(1)) #=> [6, 10, 9, 2] | |
def sample(n = (ary = false), random: Random) | |
if Primitive.mandatory_only? | |
# Primitive.cexpr! %{ rb_ary_sample(self, rb_cRandom, Qfalse, Qfalse) } | |
Primitive.ary_sample0 | |
else | |
# Primitive.cexpr! %{ rb_ary_sample(self, random, n, ary) } | |
Primitive.ary_sample(random, n, ary) | |
end | |
end | |
end |