1

我有几个要放入 nil 的数组,以便根据我使用数组的方式,我的索引将进一步放入数组中。有没有更快、更高效、更优雅的方式?

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

2 回答 2

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给定多个参数时,它将所有参数添加到数组中,这是所需的结果。

于 2013-01-31T18:26:13.770 回答
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 
于 2013-01-31T18:44:21.707 回答