Ruby:将两个数组的单个值分配到第三个数组中

时间:2014-08-22 14:25:50

标签: ruby arrays

我有两个数组:['x','y','z'][1,2]。我如何在第三个数组中创建值对(作为字符串)?

所以我最终会这样:

['x:1', 'x:2', 'y:1', 'y:2', 'z:1', 'z:2']

感谢您的帮助!

3 个答案:

答案 0 :(得分:11)

您可以使用product方法创建对,然后使用join

a1 = ['x','y','z']
a2 = [1,2]
a1.product(a2).map {|p| p.join(':') }

答案 1 :(得分:2)

我的建议是将问题分成两个不同的问题。在这种情况下,以下内容:

  1. 一次遍历两个数组上的每个元素。在我们前进时推进价值观。
  2. 将字符串放入分支新数组中。
  3. 虽然很乱,但我可能会沿着这条道路做点什么:

    def foo
      #declare our known values as arrays, and initialize the container of the final result.
      combined_array = []
      array_letters = ['x', 'y', 'z']
      array_numbers = ['1', '2']
    
      array_letters.each do |letter|
        array_numbers.each do |number|
          combined_array << "#{letter}:#{number}"
        end
      end
      #return our new array
      combined_array
    end
    

    现在请注意,我相信有更好的方法可以做到这一点。但考虑到,我相当肯定这应该有效。

答案 2 :(得分:2)

这是一种简短有效的方法,并且读得很好。

a1 = ['x','y','z']
a2 = [1,2]

a1.flat_map { |e| a2.map { |f| "#{e}:#{f}" } }
  #=> ['x:1', 'x:2', 'y:1', 'y:2', 'z:1', 'z:2']

我最初有a2.map { |f| e.to_s+?:+f.to_s }。我将flat_map替换为map,将e.to_s+?:+f.to_s替换为"#{e}:#{f}",分别由@PhilRoss和@Stefan建议。谢谢你们两个。