Map-Verkettung
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 22 von 56.
Du hast map bereits 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 Co. verkettest.
Jede Methode gibt ein Array zurück, sodass der Aufruf einer weiteren Methode auf dem Ergebnis einfach fortgesetzt wird:
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, multipliziere jede mit 10. Keine temporären Variablen, keine Schleife.
Die Abkürzung &:method_name funktioniert immer dann, wenn der Block nur eine Methode aufruft:
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (dasselbe)Diese Kurzschreibweise ist überall in Ruby-Code zu finden. 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 verbunden mit , .
Erstelle es als eine Kette: select die langen, map sie mit &:upcase, dann join.
Für die Eingabe hi,hello,yo,coddy,sup ist die Ausgabe:
HELLO, CODDYSpickzettel
Array-Methoden verketten — jede gibt ein neues Array zurück, sodass Sie weiterhin Methoden auf dem Ergebnis aufrufen können:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
# [10, 30, 50]Verwenden Sie &:method_name als Abkürzung, wenn ein Block nur eine Methode aufruft:
["hi", "yo"].map(&:upcase) # ["HI", "YO"]Probier 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
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer