4

想象一下我有一个像这样的数组:

[["abc","zxy","fgh"], ["fgj","xxy"], ["eee", "aaa", "bbb", "hhh"]]

我想要一个包含每个子数组的所有元素的数组,加上附加的空(或默认)项,直到最大子数组的长度。

例如,这将是:

[["abc","zxy","fgh", ""], ["fgj","xxy", "", ""], ["eee", "aaa", "bbb", "hhh"]]

有任何想法吗?

4

2 回答 2

5

将每个数组映射到一个新数组,其初始大小为所有数组的最大值,当没有值时回退到默认值。

array = [["abc","zxy","fgh"], ["fgj","xxy"], ["eee", "aaa", "bbb", "hhh"]]
max_size = array.map(&:size).max
array.map { |a| Array.new(max_size) { |i| a[i] || '' } }
#=> [["abc", "zxy", "fgh", ""],
#    ["fgj", "xxy", "", ""],
#    ["eee", "aaa", "bbb", "hhh"]]

请注意,如果您的初始(子)数组中有一个nil,这将用一个空字符串替换它''

于 2013-02-09T05:22:29.563 回答
4

简单地:

array=[["abc","zxy","fgh"], ["fgj","xxy"], ["eee", "aaa", "bbb", "hhh"]]
array.map {|sub_array| sub_array.in_groups_of(4, "").flatten }

#=> [["abc", "zxy", "fgh", ""],
#    ["fgj", "xxy", "", ""],
#    ["eee", "aaa", "bbb", "hhh"]] 
于 2013-02-09T05:26:00.700 回答