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 に答える