我有一个Ruby数组[1, 4]
。我想在中间插入另一个数组[2, 3]
,使其变为[1, 2, 3, 4]
。我可以用[1, 4].insert(1, [2, 3]).flatten
实现这一点,但有更好的方法吗?
答案 0 :(得分:12)
答案 1 :(得分:4)
方法Array#[]=的一种形式有两个参数,index
和length
。当后者为零并且rvalue是一个数组时,该方法将rvalue的元素插入接收器之前给定索引处的元素(并返回rvalue)。因此,要插入以下元素:
b = [2,3]
成:
a = [1,4]
在索引1
(4
)之前的元素之前,我们写道:
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]