如何在数组中间插入数组?

时间:2016-01-27 09:13:16

标签: ruby

我有一个Ruby数组[1, 4]。我想在中间插入另一个数组[2, 3],使其变为[1, 2, 3, 4]。我可以用[1, 4].insert(1, [2, 3]).flatten实现这一点,但有更好的方法吗?

4 个答案:

答案 0 :(得分:12)

你可以通过以下方式完成。

[1,4].insert(1,*[2,3])

insert()方法处理多个参数。因此,您可以使用splat运算符*将数组转换为参数。

答案 1 :(得分:4)

方法Array#[]=的一种形式有两个参数,indexlength。当后者为零并且rvalue是一个数组时,该方法将rvalue的元素插入接收器之前给定索引处的元素(并返回rvalue)。因此,要插入以下元素:

b = [2,3]

成:

a = [1,4]

在索引14)之前的元素之前,我们写道:

a[1,0] = b
  #=> [2,3]
a #=> [1,2,3,4]

注意:

a=[1,4]
a[0,0] = [2,3]
a #=> [2,3,1,4]

a=[1,4]
a[2,0] = [2,3]
a #=> [1,4,2,3]

a=[1,4]
a[4,0] = [2,3]
a #=> [1,4,nil,nil,2,3]]

这就是插入位置在给定索引之前的原因。

答案 2 :(得分:3)

def insert_array receiver, pos, other
  receiver.insert pos, *other
end

insert_array [1, 4], 1, [2, 3]
#⇒ [1, 2, 3, 4]

或者,可以通过monkeypatching Array类来实现上述目标:

class Array
  def insert_array pos, other
    insert pos, *other
  end
end

我相信,这是足够短的符号,可以有任何额外的语法糖。顺便说一句,压扁结果并不是一个好主意,因为它会破坏输入数组,内部已有数组:

[1, [4,5]].insert 1, *[2,3]
#⇒ [1, 2, 3, [4,5]]

但:

[1, [4,5]].insert(1, [2,3]).flatten
#⇒ [1, 2, 3, 4, 5]

答案 3 :(得分:0)

我的选项没有数组#插入方法

array = [1,2,3,6,7,8]
new_array = [4,5]

array[0...array.size/2] + new_array + array[array.size/2..-1]