count, all?, any?, none?
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 24 de 56.
Quatro pequenos métodos Enumerable que respondem a perguntas sobre uma coleção sem obrigar você a escrever um loop.
count retorna quantos elementos satisfazem o bloco:
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5 (sem bloco, contagem total)all? é verdadeiro quando todos os elementos satisfazem o bloco:
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? é verdadeiro quando pelo menos um deles faz isso:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? é verdadeiro quando nenhum deles faz isso:
[1, 3, 5].none? { |n| n.even? } # trueOs métodos fazem curto-circuito: any? para na primeira correspondência, all? para na primeira falha. Eles são baratos.
Desafio
FácilLeia uma lista de notas de testes (inteiros) separadas por vírgulas. Uma turma é uma turma válida e aprovada quando:
none?das notas é negativa (um teste não registrado)all?as notas são no máximo100any?nota é exatamente100(pelo menos uma nota máxima)- pelo menos 3 notas são
>= 70(usecount)
Imprima exatamente uma linha:
Valid: <count> passingquando as quatro condições forem atendidas (counté a quantidade de notas>= 70)Invalidcaso contrário
Para a entrada 72,80,100,65,90: 4 notas >= 70, nenhuma negativa, todas <= 100, uma é 100, então a saída é Valid: 4 passing.
Para 72,80,90: 3 aprovadas, mas nenhuma nota máxima, então Invalid.
Experimente você mesmo
scores = gets.chomp.split(",").map(&:to_i)
# TODO: combine all?, any?, none?, count para decidir Válido vs Inválido
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Visão Geral dos Métodos de StringInterpolação de StringsPercorrendo StringsDividir e UnirRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA Palavra-chave yieldParâmetros de BlocoProcs e LambdasRevisão - Iterador Personalizado7Hashes - Parte 2
Hash.new com Valores PadrãoIterando sobre HashesHashes AninhadosMesclando e TransformandoRecapitulação - Contador de Frequência10Projeto - Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno2Intervalos
O que é um intervalo?Métodos de intervaloIntervalos em Case / WhenRevisão - Prática com intervalos5Potência do Enumerable
Select e RejectEncadeando MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Pipeline de DadosPratique por conta própria: Compilador de Ruby online