count, all?, any?, none?
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 24 von 56.
Vier kleine Enumerable-Methoden, die Fragen zu einer Sammlung beantworten, ohne dass man eine Schleife schreiben muss.
count gibt zurück, wie viele Elemente den Block erfüllen:
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5 (kein Block, Gesamtzahl)all? ist wahr, wenn jedes Element die Bedingung im Block erfüllt:
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? ist wahr, wenn mindestens ein Element die Bedingung erfüllt:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? ist wahr, wenn keines von ihnen die Bedingung erfüllt:
[1, 3, 5].none? { |n| n.even? } # trueDie Methoden nutzen Short-Circuiting, any? stoppt beim ersten Treffer, all? stoppt beim ersten Fehlschlag. Sie sind effizient.
Aufgabe
EinfachLies eine kommagetrennte Liste von Testergebnissen (Ganzzahlen) ein. Eine Klasse ist eine valid passing class, wenn:
none?der Ergebnisse negativ ist (ein nicht erfasster Test)all?Ergebnisse höchstens100sindany?Ergebnis genau100ist (mindestens ein perfektes Ergebnis)- mindestens 3 Ergebnisse
>= 70sind (verwendecount)
Gib genau eine Zeile aus:
Valid: <count> passingwenn alle vier Bedingungen erfüllt sind (countist die Anzahl der Ergebnisse>= 70)Invalidandernfalls
Für die Eingabe 72,80,100,65,90: 4 Ergebnisse >= 70, keines negativ, alle <= 100, eines ist 100, daher ist die Ausgabe Valid: 4 passing.
Für 72,80,90: 3 bestehen, aber kein perfektes Ergebnis, daher Invalid.
Spickzettel
Vier Enumerable-Methoden, die Fragen über eine Collection beantworten:
count – gibt zurück, wie viele Elemente den Block erfüllen (oder die Gesamtgröße ohne Block):
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5all? – true, wenn jedes Element den Block erfüllt:
[2, 4, 6].all? { |n| n.even? } # trueany? – true, wenn mindestens ein Element den Block erfüllt:
[1, 2, 3].any? { |n| n.even? } # truenone? – true, wenn kein Element den Block erfüllt:
[1, 3, 5].none? { |n| n.even? } # trueDiese Methoden verwenden Short-Circuiting: any? stoppt beim ersten Treffer, all? stoppt beim ersten Fehlschlag.
Probier es selbst
scores = gets.chomp.split(",").map(&:to_i)
# TODO: kombiniere all?, any?, none?, count, um über Valid vs Invalid zu entscheiden
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