在我的Ruby脚本中,我目前有一个2D数组,其中的元素都是不同长度的数组。在这个例子中,为简单起见,整数是每个相应数组的索引,可以被认为是所有字符串的实际值的占位符。
my_2D_array =
[[1],
[1, 2, 3],
[1, 2, 3, 4, 5, 6, 7, 8],
[1, 2, 3, 4],
[1, 2],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[],
[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 7]]
如何填充新的2D数组或操纵现有的2D数组,以便所有数组的长度相同,使用nil值填充新的元素?像这样:
my_2D_array =
[[1, nil, nil, nil, nil, nil, nil, nil, nil],
[1, 2, 3, nil, nil, nil, nil, nil, nil],
[1, 2, 3, 4, 5, 6, 7, 8, nil],
[1, 2, 3, 4,, nil, nil, nil, nil, nil],
[1, 2, nil, nil, nil, nil, nil, nil, nil],
[1, 2, 3, 4, 5, nil, nil, nil, nil],
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[nil, nil, nil, nil, nil, nil, nil, nil, nil],
[1, 2, 3, 4, 5, 6, nil, nil, nil],
[1, 2, 3, 4, 5, 6, 7, nil, nil]]
答案 0 :(得分:3)
l = my_2D_array.map(&:length).max
my_2D_array.each{|e| e[l - 1] ||= nil}
答案 1 :(得分:3)
使用带有块的Array::new
构建大小相同的数组的方法略有不同:
size = my_2D_array.map(&:size).max
my_2D_array.map { |ary| Array.new(size) { |i| ary[i] } }
这将返回一个新数组,不会修改嵌套数组。
答案 2 :(得分:0)
尝试:
max_size = my_2D_array.max_by(&:size).size
my_2D_array.each do |i|
max_size.times {|j| i[j] = nil if i[j].blank? }
end