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, recuento total)all? es verdadero cuando cada elemento satisface el bloque:
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? es verdadero cuando al menos uno cumple la condición:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? es true cuando ninguno de ellos lo cumple:
[1, 3, 5].none? { |n| n.even? } # trueLos métodos son de cortocircuito, any? se detiene en la primera coincidencia, all? se detiene ante el primer fallo. Son económicos.
Desafío
FácilLee una lista de puntuaciones de exámenes (enteros) separada por comas. Una clase es una valid passing class cuando:
none?de las puntuaciones es negativa (un examen no registrado)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 el recuento de puntuaciones>= 70)Invalidde lo 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 aprobados pero ninguna puntuación perfecta, por lo que es Invalid.
Hoja de referencia
Cuatro métodos de Enumerable que responden preguntas sobre una colección:
count – devuelve cuántos elementos satisfacen el bloque (o el tamaño total sin un bloque):
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5all? – verdadero cuando cada elemento satisface el bloque:
[2, 4, 6].all? { |n| n.even? } # trueany? – verdadero cuando al menos un elemento satisface el bloque:
[1, 2, 3].any? { |n| n.even? } # truenone? – verdadero cuando ningún elemento satisface el bloque:
[1, 3, 5].none? { |n| n.even? } # trueEstos métodos tienen cortocircuito: any? se detiene en la primera coincidencia, all? se detiene en el primer fallo.
Pruébalo tú mismo
scores = gets.chomp.split(",").map(&:to_i)
# TODO: combinar 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
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline