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"] # nilHash.new(default) cambia le cose. Ogni chiave mancante restituisce il valore che hai passato:
scores = Hash.new(0)
puts scores["Alice"] # 0Questo è 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.
Sfida
FacileLeggi 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: 20Se 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
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