Menu
Coddy logo textTech

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"]
challenge icon

Aufgabe

Anfänger

Lies eine durch Kommas getrennte Liste von Ganzzahlen ein. Gib zwei Zeilen aus:

  1. Die Zahlen größer als 10 (verwende select), verbunden mit ,
  2. Die Zahlen, die nicht durch 3 teilbar sind (verwende reject), verbunden mit ,

Für die Eingabe 3,7,12,15,20 lautet die Ausgabe:

12, 15, 20
7, 20

Spickzettel

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 ", "
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmfluss