可以使用<<<<<<< Rails 3.1中的运算符?

时间:2011-11-28 21:52:26

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我可以写下以下内容......

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

如下所示? ...

      obj.categories << raw_data.categories

2 个答案:

答案 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"]