Map verketten
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 22 von 56.
Du hast map in den Grundlagen kennengelernt; es erstellt ein neues Array, indem es jedes Element transformiert. Seine wahre Stärke zeigt sich, wenn du es mit select, reject und ähnlichen Methoden verkettest.
Jede Methode gibt ein Array zurück, daher kannst du einfach eine weitere Methode auf dem Ergebnis aufrufen:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Lies die Kette von oben nach unten: Beginne mit Zahlen, behalte die ungeraden bei und multipliziere jede mit 10. Keine temporären Variablen, keine Schleife.
Die Kurzschreibweise &:method_name funktioniert immer dann, wenn der Block lediglich eine Methode aufruft:
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (gleich)Diese Kurzschreibweise findet sich überall im Ruby-Code. Erkenne sie, wenn du sie siehst.
Aufgabe
EinfachLies eine durch Kommas getrennte Liste von Wörtern ein. Gib in einer einzigen Zeile die Wörter aus, die länger als 3 Zeichen sind, in Großbuchstaben und mit , verbunden.
Erstelle dies als eine Kette: select die langen Wörter, wende mit &:upcase map auf sie an und verwende anschließend join.
Für die Eingabe hi,hello,yo,coddy,sup lautet die Ausgabe:
HELLO, CODDYProbier es selbst
words = gets.chomp.split(",")
# TODO: select + map(&:upcase) + join verketten
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 Iterator2Bereiche
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