Menu
Coddy logo textTech

Hash.new mit Standardwerten

Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 33 von 56.

Standardmäßig gibt die Suche nach einem fehlenden Schlüssel in einem Hash nil zurück:

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

Hash.new(default) ändert das. Jeder fehlende Schlüssel gibt den Wert zurück, den du übergeben hast:

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

Dies ist die sauberste Art, einen Zähler zu schreiben. Du musst vor dem Erhöhen nicht prüfen, ob if scores[name].nil? gilt:

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}

Wichtig: Hash.new(0) setzt den Standardwert auf 0, speichert den Schlüssel jedoch nicht, wenn du ihn liest. Der Hash bleibt leer, bis du eine Zuweisung vornimmst. Sobald du also counts[letter] += 1 schreibst, wird der Schlüssel mit dem neuen Wert hinzugefügt.

challenge icon

Aufgabe

Einfach

Lies eine durch Kommas getrennte Liste von category:amount-Einträgen (z. B. food:12,gas:30,food:8,books:25,gas:15). Erstelle mit Hash.new(0) einen Hash mit den Gesamtsummen pro Kategorie und gib anschließend nur die Kategorien aus, deren Summe mindestens 20 beträgt, eine pro Zeile, nach der Summe absteigend sortiert:

<category>: <total>

Für die obige Beispiel-Eingabe lautet die Ausgabe:

gas: 45
books: 25
food: 20

Wenn keine Kategorie 20 erreicht, gib nichts aus.

Probier es selbst

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

# TODO: totals = Hash.new(0); Betrag pro Kategorie akkumulieren;
#       dann Kategorien mit total >= 20 ausgeben, sortiert nach total desc
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmfluss

Übe selbstständig: Online-Ruby-Compiler