Sha256: 47289f842821036c911640c3303dc3995e697c65cbd9685eb2ce6dcd40a4f7ab

Contents?: true

Size: 1.74 KB

Versions: 4

Compression:

Stored size: 1.74 KB

Contents

# = hash_extend.rb
#
# @author Rodrigo Fernández
#
# == Clase Hash
# Esta clase extiende las funcionalidades de la clase Hash de Ruby
class Hash
  # Retorna un hash con elementos aleatorios del hash original.
  # @param quantity [Integer] la cantidad de elementos del nuevo hash retornado.
  # @return [Hash] un hash con elementos aleatorios del hash original.
  # @example
  #   hash = {uno: 'uno', dos: 'dos', tres: 'tres'}
  #   hash.sample
  #     => {dos: 'dos'}
  #   hash.sample(2)
  #     => {uno: 'uno', tres: 'tres'}
  def sample(quantity=1)
    sample_keys = self.keys.sample(quantity)
    sample_values = {}
    sample_keys.each do |sample_key|
      sample_values[sample_key] = self[sample_key]
    end
    sample_values
  end

  # Retorna un hash con elementos aleatorios del hash original y borra estos elementos del hash.
  # @param quantity [Integer] la cantidad de elementos del nuevo hash retornado.
  # @return [Hash] un hash con elementos aleatorios del hash original.
  # @example
  #   hash = {uno: 'uno', dos: 'dos', tres: 'tres'}
  #   hash.sample
  #     => {dos: 'dos'}
  #   hash.sample(2)
  #     => {uno: 'uno', tres: 'tres'}
  def sample!(quantity=1)
    samples = self.sample(quantity)
    remove!(samples.keys)
    samples
  end

  # Borra elementos del hash.
  # @note Los elementos son borrados del hash original
  # @param keys [Array] las claves a remover separadas por comas o en un arreglo.
  # @return [Hash] un hash sin los elementos indicados.
  # @example
  #   hash = {uno: 'uno', dos: 'dos', tres: 'tres'}
  #   hash.remove!(:uno)
  #     => {:dos=>"dos", :tres=>"tres"}
  #   hash.remove!(:uno, :dos, :tres)
  #     => {}
  #   hash
  #     => {}
  def remove!(*keys)
    keys.flatten.each{|key| self.delete(key) }
    self
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
liri-0.3.0 lib/hash_extend.rb
liri-0.2.1 lib/hash_extend.rb
liri-0.2.0 lib/hash_extend.rb
liri-0.1.0 lib/hash_extend.rb