0Pricing
Ruby Academy · Aula

reduce e each_with_object

Agregue coleções.

reduce e each_with_object é uma aula grátis de Ruby Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Ruby Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ruby Academy inclui 4 aulas no total.

O que é reduce?

reduce (o alias inject) combina todos os elementos em um único valor. O bloco recebe um acumulador e o elemento atual.

sum = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts sum

Como funciona o acumulador

O acumulador transporta o resultado em andamento entre as iterações. O que quer que o bloco retorne se torna o próximo acumulador.

[1, 2, 3].reduce(0) do |acc, n|
  puts "acc=#{acc} n=#{n}"
  acc + n
end

reduce sem valor inicial

Sem um valor inicial, o primeiro elemento se torna o acumulador e a iteração começa pelo segundo.

puts [10, 20, 30].reduce { |acc, n| acc + n }

reduce com um símbolo

Para operadores simples, forneça um símbolo como :+ ou :* em vez de um bloco.

puts [1, 2, 3, 4].reduce(:+)
puts [1, 2, 3, 4].reduce(:*)

Encontrando um máximo

reduce pode calcular mais do que somas, como o maior valor.

nums = [3, 9, 2, 7]
max = nums.reduce { |acc, n| n > acc ? n : acc }
puts max

Construindo uma cadeia de caracteres

O acumulador pode ser de qualquer tipo, incluindo uma cadeia de caracteres que você vai construindo.

letters = ["r", "u", "b", "y"]
word = letters.reduce("") { |acc, c| acc + c.upcase }
puts word

O que é each_with_object?

each_with_object é semelhante a reduce, mas você fornece um objeto mutável que é retornado automaticamente. Você altera o objeto dentro do bloco.

result = [1, 2, 3].each_with_object([]) do |n, arr|
  arr << n * 2
end
puts result.inspect

Construindo uma tabela de dispersão

each_with_object é perfeito para construir tabelas de dispersão, pois você não precisa retornar o objeto a cada vez.

words = ["apple", "pear"]
lengths = words.each_with_object({}) do |w, h|
  h[w] = w.length
end
puts lengths

Contando ocorrências

Combine uma tabela de dispersão padrão com each_with_object para contabilizar itens.

votes = ["a", "b", "a", "a"]
tally = votes.each_with_object(Hash.new(0)) do |v, h|
  h[v] += 1
end
puts tally

reduce versus each_with_object

Use reduce quando cada etapa retornar um valor novo (somas, produtos). Use each_with_object quando você alterar um único contêiner (vetores, tabelas de dispersão).

puts [1, 2, 3].reduce(:+)
puts [1, 2, 3].each_with_object([]) { |n, a| a << n }.inspect

O atalho da contagem

Para fazer contagens, Ruby tem um método tally integrado que faz o trabalho por você.

puts ["a", "b", "a"].tally

Verificação rápida

Verifique suas habilidades de agregação.

Recapitulação

Agora você consegue agregar coleções:

  • reduce/inject com acumulador, valor inicial ou símbolo
  • each_with_object para construir vetores e tabelas de dispersão
  • tally para contagens rápidas
  • escolha reduce para valores novos e each_with_object para contêineres mutáveis

Próximo curso: números e matemática.

puts (1..5).reduce(:*)

Perguntas Frequentes

A aula “reduce e each_with_object” é grátis?

Sim — o texto completo de “reduce e each_with_object” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Ruby Academy, atualize para CoddyKit PRO. O curso de Ruby Academy inclui 4 aulas no total.

O que vou aprender em “reduce e each_with_object”?

Agregue coleções. Você pratica Ruby Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Ruby Academy?

Nenhuma experiência prévia é necessária. Ruby Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “reduce e each_with_object”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Ruby Academy?

Sim. Cada aula de Ruby Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando intervalos
  2. O módulo Enumerable
  3. map, select, reject
  4. reduce e each_with_object
← Voltar para Ruby Academy