Sha256: 3440edb4306a83f5b3190050e2c56a16059a8e23c24b6c9bf10f2b79ce1bef7f

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

# = 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 = 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 = 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| delete(key) }
    self
  end

  # Retorna un nuevo hash con los elementos borrados según las claves indicadas
  def remove(*keys)
    cloned_hash = self.clone
    keys.flatten.each { |key| cloned_hash.delete(key) }
    cloned_hash
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
liri-0.4.1 lib/hash_extend.rb
liri-0.4.0 lib/hash_extend.rb