count, all?, any?, none?
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy. Lección 24 de 56.
Cuatro pequeños métodos de Enumerable que responden preguntas sobre una colección sin obligarte a escribir un bucle.
count devuelve cuántos elementos satisfacen el bloque:
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5 (sin bloque, conteo total)all? es true cuando cada elemento satisface el bloque:
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? es true cuando al menos uno lo hace:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? es verdadero cuando ninguno de ellos lo cumple:
[1, 3, 5].none? { |n| n.even? } # trueLos métodos hacen cortocircuito: any? se detiene en la primera coincidencia y all? se detiene ante el primer fallo. Son económicos.
Desafío
FácilLee una lista de puntuaciones de pruebas separadas por comas (enteros). Una clase es una clase válida que aprueba cuando:
none?de las puntuaciones es negativa (una prueba no registrada)all?las puntuaciones son como máximo100any?puntuación es exactamente100(al menos una puntuación perfecta)- al menos 3 puntuaciones son
>= 70(usacount)
Imprime exactamente una línea:
Valid: <count> passingcuando se cumplen las cuatro condiciones (countes la cantidad de puntuaciones>= 70)Invaliden caso contrario
Para la entrada 72,80,100,65,90: 4 puntuaciones >= 70, ninguna negativa, todas <= 100, una es 100, por lo que la salida es Valid: 4 passing.
Para 72,80,90: 3 aprobadas, pero ninguna puntuación perfecta, por lo que la salida es Invalid.
Pruébalo tú mismo
scores = gets.chomp.split(",").map(&:to_i)
# TODO: combina all?, any?, none?, count para decidir Valid vs Invalid
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datosPractica por tu cuenta: Compilador de Ruby online