Question

Puis-je écrire ce qui suit ...

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

En ce qui suit à la place? ...

      obj.categories << raw_data.categories
Était-ce utile?

La solution

obj.categories |= raw_data.categories 

Autres conseils

Jetez un oeil à Array#<< et Array#push.

Array#<< prend une qui est annexée à la place de réseau donné. Par exemple:

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

Cependant, si vous passez un tableau, vous serez surpris du résultat

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

Array#push peut manipuler des objets 1+, chacun d'eux sont annexées à la matrice.

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

Toutefois, l'appel #push avec un tableau vous donne le même résultat que #<<.

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

Afin de pousser tous les éléments du tableau, il suffit d'ajouter un * avant le second tableau.

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

Sur le même sujet, alors que Array#+ ne concaténer les tableaux, il permettra également à des valeurs en double.

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 cela est non souhaité, l'opérateur | renverra une union de deux tableaux, sans valeurs en double.

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top