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 Wahrheitswert 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 ursprüngliche bleibt unverändert.
Der Block ist einfach ein Prädikat; alles, was zu wahr oder falsch 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, 20Probier es selbst
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: Zeile 1, numbers > 10, verbunden mit ", "
# TODO: Zeile 2, numbers 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
Ü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