我有一个数组来提供一组范围,如range = [[10,15], [7,13], [2,3]..]
。我使用这些范围嵌套迭代块,如下所示。
(10..15).each{|i|
(7..13).each{|j|
(2..3).each{|k|
puts "#{k} - #{j} - #{i}"
}
}
}
我必须根据范围数组的大小及其元素动态地形成这些嵌套循环。我想我应该通过构建上面的迭代块来动态定义一个方法,并调用该方法来完成这项工作。但我无法对此进行编码。非常感谢您的帮助。
答案 0 :(得分:3)
range = [[10, 15], [7, 13], [2, 3]]
range = range.map { |a,b| (a..b).to_a }
# range is now `[[10, 11, 12, 13, 14, 15], [7, 8, 9, 10, 11, 12, 13], [2, 3]]`
range[0].product(*range[1..-1]) { |xs|
puts xs.join(' - ')
}
输出:
10 - 7 - 2
10 - 7 - 3
10 - 8 - 2
...
15 - 12 - 3
15 - 13 - 2
15 - 13 - 3
更新。如果您使用的旧版本的ruby没有Array#product
,请使用以下命令:
class Array
def product(*others)
if others.empty?
each {|x| yield [x] }
else
each {|x| others[0].product(*others[1..-1]) { |ys| yield [x] + ys }}
end
end
end
答案 1 :(得分:0)
range = [[10,15], [7,13], [3,2]]
count = 0
str = ''
def dyn_levels(count, range)
(range[count][0]..range[count][1]).each do |i|
str.insert(str.size,i)
if count < range.size
str.insert(str.size,'-')
count+=1
dyn_level(count, range)
end
end
end
str.reverse!