Ranges in Case / When
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 8 von 56.
Ranges glänzen in Rubys case-Anweisung. Wo viele Sprachen eine Kette von if/elsif mit Vergleichsoperatoren benötigen, lässt Ruby Sie einen Wert direkt gegen Ranges prüfen.
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CHinter den Kulissen verwendet when 70..79 den ===-Operator des Bereichs, was äquivalent zu (70..79).include?(score) ist.
Die case-Form ist kürzer, einfacher zu lesen und schneller zu schreiben als eine lange if/elsif-Kaskade.
Aufgabe
EinfachLies eine kommagetrennte Liste von ganzzahligen Altern ein. Klassifiziere jedes Alter mit einer case-Anweisung unter Verwendung von Bereichen (ranges):
0..12:Child13..19:Teen20..64:Adult65oder höher:Senior- Alles andere (negativ): übersprungen, erscheint nicht im Bericht
Gib für jede Kategorie, die nicht Null ist, eine Zeile mit der Anzahl in dieser festen Reihenfolge aus: Child, Teen, Adult, Senior. Überspringe Kategorien mit null Personen. Gib nach den Zählungen Skipped: <n> aus, wobei n die Anzahl der negativen (ungültigen) Alter ist.
Für die Eingabe 5,15,30,70,-3,40,12 lautet die Ausgabe:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Spickzettel
Verwenden Sie Bereiche in case-Anweisungen — Ruby vergleicht mittels === (entspricht include?):
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CProbier es selbst
ages = gets.chomp.split(",").map(&:to_i)
# TODO: Jedes Alter mit case + ranges klassifizieren, pro Kategorie zählen, Bericht ausgeben
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