如何在Ruby中遍历范围数组?
如果您有一个范围数组,例如如何在Ruby中遍历范围数组?,ruby,arrays,range,enumeration,Ruby,Arrays,Range,Enumeration,如果您有一个范围数组,例如[1..4,7..11,14..18,21..25,28..28],我有哪些选项来迭代元素 我可以 ranges.each do |range| range.each do |date| puts "Do work on February #{date}" end end dates = ranges.map(&:to_a).flatten dates.each do |date| puts "Do work on February #{d
[1..4,7..11,14..18,21..25,28..28]
,我有哪些选项来迭代元素
我可以
ranges.each do |range|
range.each do |date|
puts "Do work on February #{date}"
end
end
dates = ranges.map(&:to_a).flatten
dates.each do |date|
puts "Do work on February #{date}"
end
这有点冗长,或者我可以
ranges.each do |range|
range.each do |date|
puts "Do work on February #{date}"
end
end
dates = ranges.map(&:to_a).flatten
dates.each do |date|
puts "Do work on February #{date}"
end
如果范围较大,可能会占用大量内存
还有其他选择吗?好吧,我不认为你的第一个答案太冗长,但如果这种模式得到足够多的使用,可能会有这样的情况出现-
module Enumerable
def each_node
each do |x|
(x.respond_to?(:each_node)) ? x.each_node{ |y| yield(y) } : yield(x)
end
end
end
[[[(1..5)], (1..2)],1].each_node { |x| print x } #=> 12345121
ranges = [1..4, 7..11, 14..18, 21..25, 28..28]
ranges.each_node{ |date| puts "Do work on February #{date}" } #=>as expected
有可能范围重叠吗?在我的场景中,它们不会重叠,但如果重叠,我希望只重复一次。在这种情况下,您的第一个示例对我来说非常清晰。我很想看看是否有人有更简单的东西。