And*_*imm 4 ruby arrays enumeration range
如果你有一个范围数组,例如[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
Run Code Online (Sandbox Code Playgroud)
这有点冗长,或者我能做到
dates = ranges.map(&:to_a).flatten
dates.each do |date|
puts "Do work on February #{date}"
end
Run Code Online (Sandbox Code Playgroud)
如果范围很大,可能会占用大量内存.
还有其他选择吗?
好吧,我不认为你的第一个答案太冗长,但如果这种模式经常被使用,它可能就是这样的情况 -
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |