Menu
Coddy logo textTech

Iteración de Hashes

Parte de la sección Lógica y flujo del Journey de Ruby de Coddy. Lección 34 de 56.

Los hashes son enumerables, por lo que puedes iterarlos igual que los arreglos. Hay tres patrones comunes, dependiendo de lo que desees.

each te da tanto la clave como el valor:

prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
  puts "#{item}: $#{price}"
end

each_key recorre solo las claves:

prices.each_key { |k| puts k }   # apple, bread, milk

each_value recorre solo los valores:

prices.each_value { |v| puts v }   # 1, 3, 4

Y cada método de Enumerable que viste en el capítulo anterior, map, select, reduce: también funciona en hashes. Simplemente recibes un par clave/valor (o un arreglo de 2 elementos) por iteración:

prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}
challenge icon

Desafío

Intermedio

Estás aplicando una rebaja a una lista de precios. Se proporciona el hash prices (símbolo del ítem => entero del precio).

Lee una línea de entrada: una lista separada por comas de ítems para aplicarles un descuento del 50% (coincidiendo con los símbolos en el hash, por nombre).

Imprime, en este orden:

  1. Una línea por ítem en el formato <item>: $<final_price>, donde el precio final es el valor con descuento cuando el ítem está en la lista de descuento, o el valor original en caso contrario. Itera con each. Los ítems mantienen su orden original. Usa división entera para el descuento (price / 2).
  2. Was: $<n>: el total original (usa values.sum)
  3. Now: $<n>: el total posterior al descuento
  4. Los nombres de los ítems cuyo precio final siga siendo superior a 2, unidos con , (usa select + keys en el nuevo hash)

Para la entrada bread,milk con el hash predeterminado, la salida es:

apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese

Pruébalo tú mismo

prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)

# TODO: construir el hash de precio final mediante each; imprimir líneas, totales, artículos caros
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de Ruby online