想象一下,我有一个像:
这样的数组[["abc","zxy","fgh"], ["fgj","xxy"], ["eee", "aaa", "bbb", "hhh"]]
我希望有一个数组,其中包含每个子数组的所有元素,以及附加的空(或默认)项,直到最大子数组的长度。
例如,这将是:
[["abc","zxy","fgh", ""], ["fgj","xxy", "", ""], ["eee", "aaa", "bbb", "hhh"]]
有什么想法吗?
答案 0 :(得分:4)
将每个数组映射到一个新数组,其初始大小为所有数组的最大值,在没有值时返回默认值。
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
,则会将其替换为空字符串''
。
答案 1 :(得分: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"]]