我有以下两个数组:
months = ["2017_01", "2017_02", "2017_03"]
codes = ["abc","efg"]
我想将它们组合成一个数组,如下所示:
result = ["abc_2017_01", "abc_2017_02", "abc_2017_03",
"efg_2017_01", "efg_2017_02", "efg_2017_03"]
我尝试了各种各样的东西,但最后还是像abc_efg_2017_01这样的数据等等。每个原始数组都可以是任意大小,我只是使用小数组来说明问题。
有人能提出一个很好的简洁方法吗?
答案 0 :(得分:8)
codes.product(months).map { |vals| vals.join('_') }
#⇒ [
# [0] "abc_2017_01",
# [1] "abc_2017_02",
# [2] "abc_2017_03",
# [3] "efg_2017_01",
# [4] "efg_2017_02",
# [5] "efg_2017_03"
# ]
NB 检查有关更清洁方法的评论。
答案 1 :(得分:3)
codes.flat_map do |c|
months.map { |m| "#{c}_#{m}" }
end
输出:
=> ["abc_2017_01", "abc_2017_02", "abc_2017_03", "efg_2017_01", "efg_2017_02", "efg_2017_03"]
答案 2 :(得分:1)
此外,Matrix
可能是救援:
require 'matrix'
Matrix.build(codes.size, months.size) { |row, col| "#{codes[row]}_#{months[col]}" }
.to_a.flatten
#=> ["abc_2017_01", "abc_2017_02", "abc_2017_03",
# "efg_2017_01", "efg_2017_02", "efg_2017_03"]
或与数组相同:
Array.new(codes.size) do |i|
Array.new(months.size) { |j| "#{codes[i]}_#{months[j]}"}
end.flatten
#=> ["abc_2017_01", "abc_2017_02", "abc_2017_03",
# "efg_2017_01", "efg_2017_02", "efg_2017_03"]