Menu
Coddy logo textTech

Hashes durchlaufen

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

Hashes sind aufzählbar, daher kannst du sie genauso wie Arrays durchlaufen. Es gibt drei gängige Muster, je nachdem, was du erreichen möchtest.

each übergibt dir sowohl den Schlüssel als auch den Wert:

prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
  puts "#{item}: $#{price}"
end

each_key durchläuft nur die Schlüssel:

prices.each_key { |k| puts k }   # apple, bread, milk

each_value durchläuft nur die Werte:

prices.each_value { |v| puts v }   # 1, 3, 4

Und jede Enumerable-Methode, die du im letzten Kapitel gesehen hast, map, select, reduce: funktioniert auch mit Hashes. Bei jeder Iteration erhältst du einfach ein Schlüssel/Wert-Paar (oder ein Array mit 2 Elementen):

prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}
challenge icon

Aufgabe

Mittel

Du wendest einen Rabatt auf eine Preisliste an. Der Hash prices ist gegeben (Elementsymbol => Preis als Ganzzahl).

Lies eine Eingabezeile ein: eine durch Kommas getrennte Liste von Artikeln, deren Preis um 50 % reduziert werden soll (entsprechend den Symbolen im Hash, anhand ihres Namens).

Gib in dieser Reihenfolge Folgendes aus:

  1. Eine Zeile pro Artikel im Format <item>: $<final_price>, wobei der Endpreis dem reduzierten Wert entspricht, wenn sich der Artikel in der Rabattliste befindet, andernfalls dem ursprünglichen Wert. Iteriere mit each. Die Artikel behalten ihre ursprüngliche Reihenfolge bei. Verwende für den Rabatt Ganzzahldivision (price / 2).
  2. Was: $<n>: die ursprüngliche Gesamtsumme (verwende values.sum)
  3. Now: $<n>: die Gesamtsumme nach dem Rabatt
  4. Die Namen der Artikel, deren Endpreis weiterhin über 2 liegt, verbunden mit , (verwende select + keys auf dem neuen Hash)

Für die Eingabe bread,milk mit dem Standard-Hash lautet die Ausgabe:

apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese

Probier es selbst

prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)

# TODO: final-price-Hash via each aufbauen; Zeilen, Summen, teure Artikel ausgeben
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