我可以写下以下内容......
raw_data.categories.each do |category|
obj.categories << category
end
如下所示? ...
obj.categories << raw_data.categories
答案 0 :(得分:9)
obj.categories |= raw_data.categories
答案 1 :(得分:9)
查看Array#<<
和Array#push
。
Array#<<
将一个附加到给定数组的位置。例如:
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array << 'd' # => ["a", "b", "c", "d"]
但是,如果你传递一个数组,你会对结果感到惊讶
irb> array << ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
Array#push
可以处理1个以上的对象,每个对象都附加到数组中。
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array.push 'd' # => ["a", "b", "c", "d"]
但是,使用数组调用#push
会得到与#<<
相同的结果。
irb> array.push ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
为了推送数组中的所有元素,只需在第二个数组之前添加*
。
irb> array.push *['e', 'f', 'g'] # => ["a", "b", "c", "d", "e", "f", "g"]
在相关的说明中,虽然Array#+
会连接数组,但它也会允许重复值。
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array += ['d'] # => ["a", "b", "c", "d"]
irb> array += ['d'] # => ["a", "b", "c", "d", "d"]
如果不希望这样,|
运算符将返回两个数组的并集,没有重复值。
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]