Select und Reject
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 21 von 56.
Die Methode select gibt ein neues Array zurück, das nur die Elemente enthält, für die der Block einen wahrheitsgetreuen Wert (truthy) zurückgibt. So schreibt Ruby „filter“.
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect # [2, 4, 6]reject ist das Gegenteil, es behält alles, wofür der Block false zurückgibt:
odds = numbers.reject { |n| n.even? }
puts odds.inspect # [1, 3, 5]Beide geben ein neues Array zurück; das Original bleibt unverändert.
Der Block ist einfach ein Prädikat; alles, was zu true oder false ausgewertet wird, funktioniert:
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]Aufgabe
AnfängerLies eine durch Kommas getrennte Liste von Ganzzahlen ein. Gib zwei Zeilen aus:
- Die Zahlen größer als
10(verwendeselect), verbunden mit, - Die Zahlen, die nicht durch
3teilbar sind (verwendereject), verbunden mit,
Für die Eingabe 3,7,12,15,20 lautet die Ausgabe:
12, 15, 20
7, 20Spickzettel
select gibt ein neues Array mit Elementen zurück, für die der Block wahrheitsgemäß (truthy) ist (wie „filter“):
evens = [1,2,3,4].select { |n| n.even? } # [2, 4]reject ist das Gegenteil und behält Elemente, für die der Block falsch (falsy) ist:
odds = [1,2,3,4].reject { |n| n.even? } # [1, 3]Beide geben ein neues Array zurück; das Original bleibt unverändert.
Probier es selbst
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: Zeile 1, Zahlen > 10, verbunden mit ", "
# TODO: Zeile 2, Zahlen NICHT durch 3 teilbar, verbunden mit ", "
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