Classes which include Denumerable will get versions of map, select, and so on, which return a Denumerator, so that they work horizontally without creating intermediate arrays.
# File lib/core/facets/denumerable.rb, line 13 def map Denumerator.new do |output| each do |*input| output.yield yield(*input) end end end
# File lib/core/facets/denumerable.rb, line 33 def reject Denumerator.new do |output| each do |*input| output.yield(*input) unless yield(*input) end end end
# File lib/core/facets/denumerable.rb, line 23 def select Denumerator.new do |output| each do |*input| output.yield(*input) if yield(*input) end end end
Skip the first n items in the list
# File lib/core/facets/denumerable.rb, line 54 def skip(n) Denumerator.new do |output| count = 0 each do |*input| output.yield(*input) if count >= n count += 1 end end end
Limit to the first n items in the list
# File lib/core/facets/denumerable.rb, line 42 def take(n) Denumerator.new do |output| count = 0 each do |*input| break if count >= n output.yield(*input) count += 1 end end end