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}"
endeach_key durchläuft nur die Schlüssel:
prices.each_key { |k| puts k } # apple, bread, milkeach_value durchläuft nur die Werte:
prices.each_value { |v| puts v } # 1, 3, 4Und 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}Aufgabe
MittelDu 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:
- 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 miteach. Die Artikel behalten ihre ursprüngliche Reihenfolge bei. Verwende für den Rabatt Ganzzahldivision (price / 2). Was: $<n>: die ursprüngliche Gesamtsumme (verwendevalues.sum)Now: $<n>: die Gesamtsumme nach dem Rabatt- Die Namen der Artikel, deren Endpreis weiterhin über
2liegt, verbunden mit,(verwendeselect+keysauf 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
cheeseProbier 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator7Hashes Teil 2
Hash.new mit StandardwertenHashes durchlaufenVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler