我有几个数组,我想把nils插入,以便我的索引 根据我如何使用aray进一步进入数组。是否有更快,更有效和更优雅的方式?
(1..@epgroup_overide_count.to_i).each do
@grp['Overides'].unshift(nil)
@grp['channel_overides'].unshift(nil)
end
答案 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