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

Ruby:将两个数组的单个值配对到第三个数组中,ruby,arrays,Ruby,Arrays,我有两个数组:['x','y','z']和[1,2]。如何在第三个数组中创建成对的值(作为字符串) 因此,我最终会得出以下结论: ['x:1', 'x:2', 'y:1', 'y:2', 'z:1', 'z:2'] 谢谢你的帮助 您可以使用该方法创建对,然后执行以下操作: 我的建议是把这个问题分成两个独立的问题。在这种情况下,应满足以下条件: 一次遍历两个数组上的每个元素。在我们前进的过程中推动价值观 将字符串放入新数组的分支中 虽然很混乱,但我可能会沿着这条路做一些事情: def foo

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

因此,我最终会得出以下结论:

['x:1', 'x:2', 'y:1', 'y:2', 'z:1', 'z:2']
谢谢你的帮助

您可以使用该方法创建对,然后执行以下操作:


我的建议是把这个问题分成两个独立的问题。在这种情况下,应满足以下条件:

  • 一次遍历两个数组上的每个元素。在我们前进的过程中推动价值观
  • 将字符串放入新数组的分支中
  • 虽然很混乱,但我可能会沿着这条路做一些事情:

    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
    
    def foo
    #将已知值声明为数组,并初始化最终结果的容器。
    组合_数组=[]
    数组_字母=['x','y','z']
    数组_数=['1','2']
    数组|个字母。每个do |个字母|
    数组|编号。每个do |编号|
    
    组合_数组这里有一种方法既短又有效,而且可读性好

    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}
    。我用
    map
    替换了
    flat\u map
    e.to\u s+?:+f.to\u s
    替换了
    “{e}:{f}”
    ,分别由@PhilRoss和@Stefan建议。谢谢你们两位。

    这是可行的,但不是Ruby方式。这是老派的做法。我不会投反对票,但我也不会投反对票。我从来没有说过这是真的,因此我在最后说肯定有更好的方法来做到这一点。事实就是这样,正如菲尔所展示的。我在看到菲尔给出的答案之前就发布了,在我发布的时候,菲尔也发布了。因此,我的页面更新了我的答案和菲尔的答案。
    a2.flat\u map
    可以替换为
    a2.map
    (结果已经是平面的)。我会使用字符串插值
    “#{e}:#{f}”
    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']