2013-02-22 76 views
3

将以下两个数组合并成多维数组的最佳方式是什么?将红宝石数组合并到多维数组中

x = ['A', 'B', 'C'] 
y = ['D', 'E', 'F'] 

期望的结果:

z = [['A', 'D'], ['A', 'E'], ['A', 'F'], ['B', 'D'], ['B', 'E'], ['B', 'F'], ['C', 'D'], ['C', 'E'], ['C', 'F']] 

回答

6

您可以使用Array#product

x = ['A', 'B', 'C'] 
y = ['D', 'E', 'F'] 

result = x.product(y) 

puts result.inspect 
+0

我正在等待有人前来,把我的答案从水中吹出来。勉强+1。 :) – 2013-02-22 18:33:04

+0

哇。这正是我所期待的。我正在浏览Ruby Core API,不知何故错过了这个。 – ardavis 2013-02-22 18:33:39

+0

@JasonSwett我明确从你的解决方案中学到了东西。 +1也给你。^_^ – 2013-02-22 20:33:53

2

这里有一种方法,虽然不一定是最简单的方式:

x = ['A', 'B', 'C'] 
y = ['D', 'E', 'F'] 

result = [] 

x.each do |x| 
    y.each do |y| 
    result << [x, y] 
    end 
end 

puts result.inspect 

更新:这里是一个更简洁的方式:

x = ['A', 'B', 'C'] 
y = ['D', 'E', 'F'] 

puts x.map { |x| 
    y.map { |y| [x, y] } 
}.inspect 
+0

这可能是最好的方式。我可以用'result << y.map {| item |替换'y.each' [item,x]}'我相信。 – ardavis 2013-02-22 18:27:17

+0

感谢您的关注。当它允许我时,我会接受你的答案。感谢您的协助。 – ardavis 2013-02-22 18:29:51

+1

没问题。另一个想法,也许你已经知道这个,但我可能会在这里使用'collect',一个别名'map',而不是'map'。尽管这两个函数的确做了相同的事情,但我发现“collect”这个名字更有意思 - 在这种情况下也是如此。 – 2013-02-22 18:31:52

0

做的就是这个样子的另一种方式:

x = ['A', 'B', 'C'] 
y = ['D', 'E', 'F'] 

print x.concat(y).each_slice(2).to_a # => [["A", "B"], ["C", "D"], ["E", "F"]] 
+0

和'x.zip(y)'不一样吗? – orde 2013-02-22 18:42:43