如何使用不同长度的数组填充2D数组,以便它们在ruby中具有相同的长度

时间:2015-02-18 07:27:55

标签: ruby arrays

在我的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]]

3 个答案:

答案 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