Ruby/Rails数组填充空项

4

想象一下,我有一个数组:

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

我希望有一个数组,其中包含每个子数组的所有元素,以及追加的空(或默认)项,直到最大子数组的长度为止。
例如,这将是:
[["abc","zxy","fgh", ""], ["fgj","xxy", "", ""], ["eee", "aaa", "bbb", "hhh"]]

你有什么想法吗?

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,这将被替换为一个空字符串''

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"]] 

1
对于未来的访问者,请注意in_groups_of不在Ruby Core中,需要使用ActiveSupport。 - Andrew Marshall
1
正确。但问题也标记有Ruby on Rails。 - Zabba
是的,我实际上问这个问题是因为我知道有 in_groups_of 这个方法,但不知道如何有效地使用它。 - mlkmt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接