ruby - arreglos - Aplicar el método a cada elemento en matriz/enumerable
array ruby (4)
¡Puedes usar map
o map!
respectivamente, el primero devolverá una nueva lista, el segundo modificará la lista in situ:
>> array = [:one,:two,:three]
=> [:one, :two, :three]
>> array.map{ |x| x.to_s }
=> ["one", "two", "three"]
Esta es mi matriz:
array = [:one,:two,:three]
Quiero aplicar el método to_s
a todos mis elementos de matriz para obtener array = [''one'',''two'',''three'']
.
¿Cómo puedo hacer esto (convertir cada elemento del enumerable en algo más)?
Esto funcionará:
array.map!(&:to_s)
Vale la pena señalar que si tiene una matriz de objetos que desea pasar de forma individual en un método con una persona que llama diferente, haga lo siguiente:
# erb
<% strings = %w{ cat dog mouse rabbit } %>
<% strings.each do |string| %>
<%= t string %>
<% end %>
Puede usar el method
método combinado con el comportamiento de expansión del bloque para simplificar:
<%= strings.map(&method(:t)).join('' '') %>
Si no está familiarizado, lo method
hace el method
es encapsular el método asociado con el símbolo que se le pasa en un Proc y lo devuelve. El ampersand expande este Proc en un bloque, que se pasa al map
bastante bien. El retorno del map
es una matriz, y es probable que deseamos formatearlo un poco más, de ahí la join
.
La advertencia es que, al igual que con Symbol#to_proc
, no se pueden pasar argumentos al método helper.
-
array.map!(&:to_s)
modifica la matriz original a[''one'',''two'',''three'']
-
array.map(&:to_s)
devuelve la matriz[''one'',''two'',''three'']
.