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 sumCó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
endreduce 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 maxConstruir 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.inspectConstruir 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 lengthsContar 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 tallyreduce 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 }.inspectLa abreviatura tally
Para contar, Ruby tiene un método integrado tally que hace el trabajo por usted.
puts ["a", "b", "a"].tallyComprobación rápida
Compruebe sus conocimientos sobre agregación.
Recapitulación
Ahora puede agregar colecciones:
reduce/injectcon acumulador, valor inicial o símboloeach_with_objectpara construir arrays y hashestallypara 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
- Creación de rangos
- El módulo Enumerable
- map, select, reject
- reduce y each_with_object