将两个数组与前置组合在一起

Rao*_*oot 3 ruby ruby-on-rails

我有以下两个数组:

months = ["2017_01", "2017_02", "2017_03"] 
codes = ["abc","efg"]
Run Code Online (Sandbox Code Playgroud)

我想将它们组合成一个数组,如下所示:

result = ["abc_2017_01", "abc_2017_02", "abc_2017_03",
          "efg_2017_01", "efg_2017_02", "efg_2017_03"]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种各样的东西,但最后还是继续使用像abc_efg_2017_01这样的值.每个原始数组都可以是任何大小,我只是使用小数组来说明问题.

任何人都可以建议一个很好的简洁方法吗?

Ale*_*kin 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"
# ]
Run Code Online (Sandbox Code Playgroud)

NB检查评论清洁方法.

  • 你不需要在这里展开`vals`:`codes.product(months).map {|*vals | vals.join('_')} == codes.product(个月).map {| vals | vals.join('_')}#=> true` (5认同)
  • splat将每对包装在一个额外的数组中,即它将`["abc","2017_01"]`转换为`[["abc","2017_01"]]`.它只能起作用,因为`join`会使嵌套数组变平.你应该删除splat. (4认同)
  • 另一个无点版本:`codes.product(months).map(&'%s_%s'.method(:%))`;-) (2认同)
  • @Stefan rofl.我担心一旦你错误地将这样的smth带入你的真正的代码库中,我将成为不莱梅的不受欢迎的人. (2认同)