Können mehrere Objekte mit dem << Operator in Rails 3.1 eingefügt werden?
-
25-10-2019 - |
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
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"]