Frage

Könnte ich Folgendes schreiben ...

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

Wie die folgende stattdessen? ...

      obj.categories << raw_data.categories
War es hilfreich?

Lösung

obj.categories |= raw_data.categories 

Andere Tipps

Sich ansehen Array#<< und Array#push.

Array#<< Nimmt eines, das an ein gewisses Array angewendet wird. Zum Beispiel:

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

Wenn Sie jedoch ein Array bestehen, werden Sie über das Ergebnis überrascht sein

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

Array#push Kann 1+ Objekte verarbeiten, von denen jede an das Array angehängt ist.

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

Allerdings anrufen #push mit einem Array gibt Ihnen das gleiche Ergebnis wie #<<.

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

Um alle Elemente in das Array zu drücken, fügen Sie einfach a hinzu * vor dem zweiten Array.

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

In einem verwandten Hinweis, während Array#+ verkettet die Arrays, es ermöglicht auch doppelte Werte.

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

Wenn dies unerwünscht ist, die | Der Betreiber gibt eine Vereinigung von zwei Arrays ohne doppelte Werte zurück.

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top