将两个范围加入到2d数组Ruby中

时间:2015-10-29 23:57:37

标签: arrays ruby matrix range

如何在ruby中将两个范围连接成二维数组?使用zip并不能提供我需要的结果。

(0..2) and (0..2)
# should become => [[0,0],[0,1],[0,2], [1,0],[1,1],[1,2], [2,0],[2,1],[2,2]]

5 个答案:

答案 0 :(得分:3)

Ruby有一个内置的方法:repeated_permutation

(0..2).to_a.repeated_permutation(2).to_a

答案 1 :(得分:1)

我很困惑。这是问题发布后的第二天,没有人提出明显的问题:Array#product

[*0..2].product [*1..3]
  #=> [[0, 1], [0, 2], [0, 3], [1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3]] 

答案 2 :(得分:0)

range_a = (0..2)
range_b = (5..8)

def custom_join(a, b)
    a.inject([]){|carry, a_val| carry += b.collect{|b_val| [a_val, b_val]}}
end

p custom_join(range_a, range_b)

输出:

[[0, 5], [0, 6], [0, 7], [0, 8], [1, 5], [1, 6], [1, 7], [1, 8], [2, 5], [2, 6], [2, 7], [2, 8]]

答案 3 :(得分:0)

直接解决方案:

range_a = (0..2)
range_b = (5..8)

def custom_join(a, b)
    [].tap{|result| a.map{|i| b.map{|j| result << [i, j]; } } }
end
p custom_join(range_a, range_b)

输出:

[[0, 5], [0, 6], [0, 7], [0, 8], [1, 5], [1, 6], [1, 7], [1, 8], [2, 5], [2, 6], [2, 7], [2, 8]]

答案 4 :(得分:0)

简单地说,这样做:

a = (0...2).to_a
b = (0..2).to_a
result = []
a.each { |ae| b.each { |be| result << [ae, be] } }
p result
# => [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2]]