Ruby - 数组之间的区别#<<和数组#push

时间:2012-05-13 05:24:15

标签: ruby arrays append

通过检查Ruby 1.9.3的文档,两个Array#<<和Array#push旨在实现将元素附加到当前数组的末尾。但是,两者之间似乎存在微妙的差异。

我遇到的是*运算符可以用来将整个其他数组的内容追加到当前数组,但只能用#push。

a = [1,2,3]
b = [4,5,6]

a.push *b
=> [1,2,3,4,5,6]

尝试使用#<<相反,它会产生各种错误,具体取决于它是否与点运算符和/或括号一起使用。

为什么#<< #push的工作方式不一样吗?一个人实际上不是另一个的别名吗?

5 个答案:

答案 0 :(得分:75)

它们非常相似,但不完全相同。

<<接受一个参数,并将其推送到数组的末尾。

另一方面,

push接受一个或多个参数,将它们全部推到最后。

<<只接受单个对象的事实是您看到错误的原因。

答案 1 :(得分:9)

<<不起作用且push的原因是:

  1. push可以接受许多参数(这是*b时会发生的事情。)
  2. <<只接受一个参数。

答案 2 :(得分:9)

Array#&lt;&lt;&lt;&lt;&lt;&lt;和数组#push是

Array#<< # can be used to insert only single element in the Array

Array#push # can be used to insert more than single element in the Array

另一个重要区别是, 在插入单个元素的情况下,

阵列#&LT;&LT;比Array#push

更快

Benchmarking可以帮助您找到这两种方式的效果,找到更多here

答案 3 :(得分:7)

此处需要注意的另一个重点是<<也是一个运营商。并且它的优先级低于三元运算符等一些运算符。这可能会导致一些意想不到的结果。例如:

arr1, arr2 = [], []

arr1.push true ? 1 : 0
arr1
# => [1] 

arr2 << true ? 1 : 0
arr2
# => [true] 

答案 4 :(得分:0)

push方法将一个项追加到数组的末尾。它可以有多个参数。 <<用于初始化数组,并且只能有一个参数,如果已经初始化,则在数组末尾添加一个元素。