Domanda

Potrei scrivere quanto segue ...

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

Come la seguente, invece? ...

      obj.categories << raw_data.categories
È stato utile?

Soluzione

obj.categories |= raw_data.categories 

Altri suggerimenti

Date un'occhiata a Array#<< e Array#push.

Array#<< prende uno è allegato in atto per dato array. Ad esempio:

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

Tuttavia, se si passa una matrice, sarete sorpresi del risultato

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

Array#push supporta 1+ oggetti, ciascuno dei quali vengono aggiunti alla matrice.

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

Tuttavia, chiamando #push con una serie ti dà lo stesso risultato di #<<.

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

Per spingere tutti gli elementi dell'array, è sufficiente aggiungere un * prima della seconda matrice.

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

In una nota correlata, mentre Array#+ non concatenare gli array, permetterà anche i valori duplicati.

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

Se questo è indesiderato, l'operatore | restituirà un unione di due array, senza valori duplicati.

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top