Iterare sugli hash
Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 34 di 56.
Gli hash sono enumerabili, quindi puoi iterarli proprio come gli array. Esistono tre schemi comuni, a seconda di ciò che vuoi fare.
each ti fornisce sia la chiave che il valore:
prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
puts "#{item}: $#{price}"
endeach_key scorre solo le chiavi:
prices.each_key { |k| puts k } # mela, pane, latteeach_value scorre solo i valori:
prices.each_value { |v| puts v } # 1, 3, 4E tutti i metodi Enumerable che hai visto nel capitolo precedente, map, select, reduce: funzionano anche sugli hash. Ricevi semplicemente una coppia chiave/valore (o un array di 2 elementi) a ogni iterazione:
prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}Sfida
MedioStai applicando uno sconto a un listino prezzi. È dato l'hash prices (simbolo dell'articolo => prezzo intero).
Leggi una riga di input: un elenco separato da virgole di articoli a cui applicare uno sconto del 50% (corrispondenti ai simboli nell'hash, in base al nome).
Stampa, in quest'ordine:
- Una riga per articolo nel formato
<item>: $<final_price>, dove il prezzo finale è il valore scontato se l'articolo è nell'elenco degli sconti, o il valore originale altrimenti. Itera coneach. Gli articoli mantengono l'ordine originale. Usa la divisione intera per lo sconto (price / 2). Was: $<n>: il totale originale (usavalues.sum)Now: $<n>: il totale dopo lo sconto- I nomi degli articoli il cui prezzo finale è ancora superiore a
2, uniti con,(usaselect+keyssul nuovo hash)
Per l'input bread,milk con l'hash predefinito, l'output è:
apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheeseProvalo tu
prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)
# TODO: crea l'hash dei prezzi finali tramite each; stampa le righe, i totali e gli articoli costosi
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Panoramica dei metodi delle stringheInterpolazione di stringheIterare sulle stringheDividere e unireRiepilogo - Tessitore di stringhe4Blocchi, Proc e Lambda
Che cos’è un Block?do..end vs parentesi graffeLa keyword yieldParametri del BlockProc e LambdaRiepilogo - Iteratore personalizzato7Hash in Ruby - Parte 2
Hash.new con valori predefinitiIterare sugli hashHash annidatiUnire e trasformareRipasso - Contatore di frequenza10Progetto - Registri degli studenti
Panoramica del progettoAggiungere uno studente2Intervalli
Che cos'è un intervallo?Metodi degli intervalliIntervalli in Case / WhenRiepilogo - Esercitarsi con gli intervalli5La potenza di Enumerable
Select e RejectConcatenare MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRiepilogo - Pipeline di datiEsercitati da solo: Compilatore Ruby online