Pregunta

¿Podría escribir lo siguiente ...

      raw_data.categories.each do |category|
          obj.categories << category
      end

Como el siguiente en su lugar? ...

      obj.categories << raw_data.categories
¿Fue útil?

Solución

obj.categories |= raw_data.categories 

Otros consejos

Echa un vistazo a Array#<< y Array#push.

Array#<< toma uno que se adjunta en su lugar a una matriz dada. Por ejemplo:

irb> array = %w[ a b c ]       # => ["a", "b", "c"]
irb> array << 'd'              # => ["a", "b", "c", "d"]

Sin embargo, si pasa una matriz, se sorprenderá del resultado

irb> array << ['e', 'f', 'g']  # => ["a", "b", "c", "d", ["e", "f", "g"]]

Array#push puede manejar más de 1 objetos, cada uno de los cuales se agregan a la matriz.

irb> array = %w[ a b c ]         # => ["a", "b", "c"]
irb> array.push 'd'              # => ["a", "b", "c", "d"]

Sin embargo, llamando #push con una matriz le da el mismo resultado que #<<.

irb> array.push ['e', 'f', 'g']  # => ["a", "b", "c", "d", ["e", "f", "g"]]

Para empujar todos los elementos de la matriz, simplemente agregue un * antes de la segunda matriz.

irb> array.push *['e', 'f', 'g']  # => ["a", "b", "c", "d", "e", "f", "g"]

En una nota relacionada, mientras Array#+ Concatena las matrices, también permitirá valores duplicados.

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array += ['d']               # => ["a", "b", "c", "d"]
irb> array += ['d']               # => ["a", "b", "c", "d", "d"]

Si esto no está deseado, el | El operador devolverá una unión de dos matrices, sin valores duplicados.

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top