把nils放在数组前面

时间:2013-01-31 18:20:02

标签: ruby arrays

我有几个数组,我想把nils插入,以便我的索引 根据我如何使用aray进一步进入数组。是否有更快,更有效和更优雅的方式?

(1..@epgroup_overide_count.to_i).each do 
    @grp['Overides'].unshift(nil)
    @grp['channel_overides'].unshift(nil)
end

2 个答案:

答案 0 :(得分:2)

#unshift使用splatted arg列表预先添加多个元素,所以:

@group['Overides'].unshift(*([nil]*@epgroup_override_count.to_i))

这样做(类似于你的第二个)


打破一个班轮:

[nil] * @epgroup_override_count.to_i

将数组乘以数字会多次复制数组,但作为单个平面数组([1,2,3]*3 #=> [1,2,3,1,2,3,1,2,3])。需要注意的一件事是,如果数组有变量引用,它会创建对同一对象的多个引用,而不是重复。

*(above_multiplied_array)

使用splat运算符将数组扩展到方法的args中

arr.unshift(multiple, args, here)

通过使用splat运算符,我们将数组分散到多个args #unshift。当#unshift被赋予多个args时,它会将它们全部添加到数组中,这是期望的结果。

答案 1 :(得分:0)

你可以这样做:

 @grp['Overides'] +=([nil]*@epgroup_override_count.to_i).flatten
 @grp['channel_overides'] += ([nil]*@epgroup_override_count.to_i).flatten

 or

 nil_array = ([nil]*@epgroup_override_count.to_i).flatten
 @grp['Overides'] += nil_array
 @grp['channel_overides'] += nil_array