count, all?, any?, none?
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 24 sur 56.
Quatre petites méthodes Enumerable qui répondent à des questions sur une collection sans vous forcer à écrire une boucle.
count retourne le nombre d'éléments qui satisfont le bloc :
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5 (pas de bloc, décompte total)all? est vrai lorsque chaque élément satisfait le bloc :
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? est vrai lorsqu'au moins un élément remplit la condition :
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? est vrai quand aucun d'entre eux ne le fait :
[1, 3, 5].none? { |n| n.even? } # trueLes méthodes fonctionnent en court-circuit, any? s'arrête à la première correspondance, all? s'arrête au premier échec. Elles sont peu coûteuses.
Défi
FacileLisez une liste de scores de test (entiers) séparés par des virgules. Une classe est une valid passing class lorsque :
none?des scores n'est négatif (un test non enregistré)all?les scores sont au maximum de100any?score est exactement de100(au moins un score parfait)- au moins 3 scores sont
>= 70(utilisezcount)
Affichez exactement une ligne :
Valid: <count> passinglorsque les quatre conditions sont remplies (countest le nombre de scores>= 70)Invalidsinon
Pour l'entrée 72,80,100,65,90 : 4 scores >= 70, aucun négatif, tous <= 100, l'un est 100, donc la sortie est Valid: 4 passing.
Pour 72,80,90 : 3 scores réussis mais pas de score parfait, donc Invalid.
Aide-mémoire
Quatre méthodes Enumerable qui répondent à des questions sur une collection :
count – renvoie le nombre d'éléments qui satisfont le bloc (ou la taille totale sans bloc) :
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5all? – vrai lorsque chaque élément satisfait le bloc :
[2, 4, 6].all? { |n| n.even? } # trueany? – vrai lorsqu'au moins un élément satisfait le bloc :
[1, 2, 3].any? { |n| n.even? } # truenone? – vrai lorsqu'aucun élément ne satisfait le bloc :
[1, 3, 5].none? { |n| n.even? } # trueCes méthodes sont à court-circuit : any? s'arrête à la première correspondance, all? s'arrête au premier échec.
Essayez vous-même
scores = gets.chomp.split(",").map(&:to_i)
# À FAIRE : combiner all?, any?, none?, count pour décider Valide vs Invalide
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline