Menu
Coddy logo textTech

Hash.new con valori predefiniti

Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 33 di 56.

Per impostazione predefinita, cercare una chiave mancante in un hash restituisce nil:

scores = {}
puts scores["Alice"]   # nil

Hash.new(default) cambia le cose. Ogni chiave mancante restituisce il valore che hai passato:

scores = Hash.new(0)
puts scores["Alice"]   # 0

Questo è il modo più pulito per scrivere un contatore. Non devi verificare if scores[name].nil? prima di incrementarlo:

counts = Hash.new(0)
["a", "b", "a", "c", "a"].each do |letter|
  counts[letter] += 1
end
puts counts.inspect   # {"a"=>3, "b"=>1, "c"=>1}

Importante: Hash.new(0) imposta il valore predefinito su 0, ma non memorizza la chiave quando la leggi. L'hash rimane vuoto finché non assegni un valore. Quindi, quando scrivi counts[letter] += 1, la chiave viene aggiunta con il nuovo valore.

challenge icon

Sfida

Facile

Leggi un elenco di voci category:amount separate da virgole (ad es. food:12,gas:30,food:8,books:25,gas:15). Crea un hash dei totali per categoria usando Hash.new(0), quindi stampa solo le categorie il cui totale è almeno 20, una per riga, ordinate per totale in ordine decrescente:

<category>: <total>

Per l’input di esempio qui sopra, l’output è:

gas: 45
books: 25
food: 20

Se nessuna categoria raggiunge 20, non stampare nulla.

Provalo tu

entries = gets.chomp.split(",")

# TODO: totals = Hash.new(0); accumula l'importo per categoria;
#       poi stampa le categorie con total >= 20, ordinate per total in ordine decrescente
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Ruby online