Articles

Inyectar Método: se Explica

Hoy en día, estamos dando un vistazo a Ruby inyectar método (#inyectar). Como cualquiera que esté lo suficientemente avanzado en su viaje para aprender más sobre codificación, sabe que los idiomas están llenos de métodos y funciones confusos e increíbles. Recientemente, me encontré con uno de estos métodos confusos y, como he aprendido, increíbles, inyectar. Estaba tratando de sumar una matriz de enteros y pensé erróneamente que ruby tenía un método nativo #sum, pero no tuve esa suerte. Así que busqué en Google y encontré # inyectar.

El método # inyectar actúa de la misma manera que el método #reducir, y se consideran alias. Estos métodos enumeradores pueden tomar un rango o matriz de números, y opcionalmente pueden recibir un bloque. Cuando se llama, el método de inyección pasará cada elemento y acumulará cada uno de forma secuencial.

.inject(:+) => (((3 + 6) + 10) + 13) => 32

O

.inject {|sum, number| sum + number} =>|3, 6| 3 + 6 => 9
=>|9, 10| 9 + 10 =>19

Para romper este aún más, inyectar toma el primer elemento de la colección y lo usa como la base de la ‘suma’. Luego toma el siguiente elemento (o el segundo elemento de la matriz) y luego los agrega juntos. El método luego asigna ese resultado a la’ suma ‘ y agrega el siguiente elemento de la colección hasta que todos los elementos hayan pasado por el bloque. En este caso, ‘suma’ es lo que llamamos un acumulador, ya que está acumulando los valores. El valor devuelto será la suma de todos los elementos de la colección.

Este método es curioso porque también puede pasarle un valor predeterminado para el acumulador. Vea a continuación:

.inject(0, :+) => 32.inject(0) {|sum, number| sum + number} => 19

Aquí, le está dando al método un valor inicial para el acumulador, ya que lo pasé a cero, el método agregará el primer elemento de la colección a cero antes de pasar a la adición del segundo y tercer elementos de la colección.

Ahora que sabemos cómo agregar valores de colecciones… Vamos a explorar el resto de las aplicaciones de #inyectar.

Crear hashes:

#Inyectar puede ser muy poderoso fuera de sumar valores. Digamos que tiene datos o un valor devuelto que es una matriz de matrices que contienen claves y valores (es decir , ]). Lo más probable es que quieras que sean pares clave: valor en un hash. La inyección puede ayudarte a hacerlo de forma muy rápida y elegante.

, ].inject({}) do |result, element| 
result = element.last
result
end
#=> {:student=>"Terrance Koar", :course=>"Web Dev"}

En este ejemplo comenzamos con una matriz de matrices que contienen pares de claves y valores. Cuando llamamos a inject y pasamos un argumento de un hash vacío, que actuará como el acumulador (o en este caso ‘resultado’). Luego, el método itera a través de cada elemento y lo inyecta en el hash utilizando el bloque proporcionado. El bloque asigna el elemento clave, que es el primero, como clave en el nuevo hash y establece el valor igual al segundo elemento en la matriz anidada. Otra cosa a tener en cuenta aquí es que el valor de retorno de inject es el siguiente resultado obtenido (típicamente la suma de enteros). Ya que queremos nuestro hash, necesitamos devolver explícitamente el hash ‘resultado’.

Además, inject se puede usar para convertir tipos de datos con la ayuda de otros métodos geniales, ¡incluso mientras se construye un nuevo hash!

, ].inject({}) do |result, element| 
result = element.last.upcase
result
end
# => {"student"=>"TERRANCE KOAR", "course"=>"WEB DEV"}OR, ].inject({}) do |result, element|
result = element.last.split
result
end# => {"student"=>, "course"=>}

La inyección no se detiene allí. También puede filtrar y construir una nueva matriz!

.inject() do |result, element| 
result << element.to_s if element > 9
result
end# =>

Aquí estamos pasando inyectar un valor inicial de una matriz vacía. El primer elemento entre el || siempre será el ‘resultado’ o acumulador en el bloque. Por lo tanto, una vez que el resultado es igual a un array vacío, podemos palear cualquier elemento que pase nuestro filtro, en este caso si el elemento es mayor que 9. De nuevo, dado que el valor de retorno de la inyección es el siguiente resultado obtenido, necesitamos devolver explícitamente el resultado.