将以下两个数组合并成多维数组的最佳方式是什么?将红宝石数组合并到多维数组中
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']]
将以下两个数组合并成多维数组的最佳方式是什么?将红宝石数组合并到多维数组中
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']]
您可以使用Array#product:
x = ['A', 'B', 'C']
y = ['D', 'E', 'F']
result = x.product(y)
puts result.inspect
这里有一种方法,虽然不一定是最简单的方式:
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
做的就是这个样子的另一种方式:
x = ['A', 'B', 'C']
y = ['D', 'E', 'F']
print x.concat(y).each_slice(2).to_a # => [["A", "B"], ["C", "D"], ["E", "F"]]
和'x.zip(y)'不一样吗? – orde 2013-02-22 18:42:43
我正在等待有人前来,把我的答案从水中吹出来。勉强+1。 :) – 2013-02-22 18:33:04
哇。这正是我所期待的。我正在浏览Ruby Core API,不知何故错过了这个。 – ardavis 2013-02-22 18:33:39
@JasonSwett我明确从你的解决方案中学到了东西。 +1也给你。^_^ – 2013-02-22 20:33:53