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}"
endeach_key recorre solo las claves:
prices.each_key { |k| puts k } # apple, bread, milkeach_value recorre solo los valores:
prices.each_value { |v| puts v } # 1, 3, 4Y 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}Desafío
IntermedioEstá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:
- 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 coneach. Los ítems mantienen su orden original. Usa división entera para el descuento (price / 2). Was: $<n>: el total original (usavalues.sum)Now: $<n>: el total posterior al descuento- Los nombres de los ítems cuyo precio final siga siendo superior a
2, unidos con,(usaselect+keysen 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
cheesePrué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
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
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data PipelinePractica por tu cuenta: Compilador de Ruby online