Sha256: 5c537df49ec93fd79c30d0f5cb2699c21a81fb89bc24487c22c96bdaba6d7a27

Contents?: true

Size: 1.36 KB

Versions: 26

Compression:

Stored size: 1.36 KB

Contents

class Array

  # 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 <tt>false</tt>,
  # the same values can be choosen more than once.
  #
  # When _exclusive_ is <tt>true</tt> (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]
  #
  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

end



#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test

  require 'test/unit'

  class TCArray < Test::Unit::TestCase

    def test_rand_subset
      10.times {
        a = [1,2,3,4].rand_subset
        assert( a.size <= 4 )
      }
    end

  end

=end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
facets-0.9.0 lib/nano/array/rand_subset.rb
facets-1.0.3 packages/core/lib/facet/array/rand_subset.rb
facets-1.0.0 lib/facet/array/rand_subset.rb
facets-1.2.1 lib/facets/core/array/rand_subset.rb
facets-1.1.0 lib/facet/array/rand_subset.rb
facets-1.2.0 lib/facets/core/array/rand_subset.rb
facets-1.3.0 lib/facets/core/array/rand_subset.rb
facets-1.3.1 lib/facets/core/array/rand_subset.rb
facets-1.3.2 lib/facets/core/array/rand_subset.rb
facets-1.3.3 lib/facets/core/array/rand_subset.rb
facets-1.4.0 lib/facets/core/array/rand_subset.rb
facets-1.4.1 lib/facets/core/array/rand_subset.rb
facets-1.4.2 lib/facets/core/array/rand_subset.rb
facets-1.4.3 lib/facets/core/array/rand_subset.rb
facets-1.4.4 lib/facets/core/array/rand_subset.rb
facets-1.4.5 lib/facets/core/array/rand_subset.rb
facets-1.7.30 lib/facets/core/array/rand_subset.rb
facets-1.7.0 lib/facets/core/array/rand_subset.rb
facets-1.7.38 lib/facets/core/array/rand_subset.rb
facets-1.7.46 lib/facets/core/array/rand_subset.rb