我可以編寫以下...在Rails 3.1中可以使用<<運算符插入多個對象嗎?
raw_data.categories.each do |category|
obj.categories << category
end
作爲替代以下? ...
obj.categories << raw_data.categories
我可以編寫以下...在Rails 3.1中可以使用<<運算符插入多個對象嗎?
raw_data.categories.each do |category|
obj.categories << category
end
作爲替代以下? ...
obj.categories << raw_data.categories
obj.categories |= raw_data.categories
看看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"]
...你試過了嗎? –
@PlatinumAzure:你*嘗試過嗎? –
@PlatinumAzure:是的,它不起作用。但是Mori的解決方案完美無缺! – Jacob