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 du eine Schleife schreiben musst.
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, Gesamtanzahl)all? ist wahr, wenn jedes Element den Block erfüllt:
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? ist wahr, wenn mindestens eines dies tut:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? ist wahr, wenn keines von ihnen dies tut:
[1, 3, 5].none? { |n| n.even? } # trueDie Methoden verwenden einen Kurzschluss, any? stoppt beim ersten Treffer, all? stoppt beim ersten Fehlschlag. Sie sind kostengünstig.
Aufgabe
EinfachLies eine durch Kommas getrennte Liste von Testergebnissen (Ganzzahlen) ein. Eine Klasse ist eine gültige bestandene Klasse, wenn:
none?der Ergebnisse negativ ist (ein nicht aufgezeichneter Test)all?Ergebnisse höchstens100sind- ein
any?-Ergebnis genau100ist (mindestens ein perfektes Ergebnis) - mindestens 3 Ergebnisse
>= 70sind (verwendecount)
Gib genau eine Zeile aus:
Valid: <count> passing, wenn 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 ist negativ, alle sind <= 100, eines ist 100, daher lautet die Ausgabe Valid: 4 passing.
Für 72,80,90: 3 sind bestanden, aber es gibt kein perfektes Ergebnis, daher Invalid.
Probier es selbst
scores = gets.chomp.split(",").map(&:to_i)
# TODO: kombiniere all?, any?, none?, count, um 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
Ü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