0Pricing
Ruby Academy · Lección

reduce y each_with_object

Agregue colecciones

reduce y each_with_object es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ruby Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ruby Academy incluye 4 lecciones en total.

¿Qué es reduce?

reduce (alias de inject) combina todos los elementos en un solo valor. El bloque recibe un acumulador y el elemento actual.

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

Cómo funciona el acumulador

El acumulador conserva el resultado obtenido hasta el momento entre iteraciones. Lo que devuelva el bloque se convierte en el siguiente acumulador.

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

reduce sin valor inicial

Sin un valor inicial, el primer elemento se convierte en el acumulador y la iteración comienza con el segundo.

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

reduce con un símbolo

Para operadores sencillos, pase un símbolo como :+ o :* en lugar de un bloque.

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

Encontrar un máximo

reduce puede calcular cosas que van más allá de las sumas, como el valor más grande.

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

Construir una cadena

El acumulador puede ser de cualquier tipo, incluida una cadena que vaya construyendo.

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

¿Qué es each_with_object?

each_with_object es similar a reduce, pero se le proporciona un objeto mutable que se devuelve automáticamente. El objeto se modifica dentro del bloque.

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

Construir un hash

each_with_object es perfecto para construir hashes porque no necesita devolver el objeto cada vez.

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

Contar apariciones

Combine un hash con valor predeterminado con each_with_object para llevar la cuenta de los elementos.

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

reduce frente a each_with_object

Use reduce cuando cada paso devuelva un valor nuevo (sumas, productos). Use each_with_object cuando modifique un contenedor (arrays, hashes).

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

La abreviatura tally

Para contar, Ruby tiene un método integrado tally que hace el trabajo por usted.

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

Comprobación rápida

Compruebe sus conocimientos sobre agregación.

Recapitulación

Ahora puede agregar colecciones:

  • reduce/inject con acumulador, valor inicial o símbolo
  • each_with_object para construir arrays y hashes
  • tally para realizar recuentos rápidos
  • elija reduce para obtener valores nuevos y each_with_object para contenedores mutables

Siguiente curso: números y matemáticas.

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

Preguntas frecuentes

¿La lección «reduce y each_with_object» es gratis?

Sí — el texto completo de «reduce y each_with_object» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ruby Academy, actualiza a CoddyKit PRO. El curso de Ruby Academy incluye 4 lecciones en total.

¿Qué aprenderé en «reduce y each_with_object»?

Agregue colecciones Practicas Ruby Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Ruby Academy?

No se requiere experiencia previa. Ruby Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «reduce y each_with_object»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Ruby Academy?

Sí. Cada lección de Ruby Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Creación de rangos
  2. El módulo Enumerable
  3. map, select, reject
  4. reduce y each_with_object
← Volver a Ruby Academy