Skip to content

Instantly share code, notes, and snippets.

@reinh
Created March 10, 2009 15:47
Show Gist options
  • Save reinh/76945 to your computer and use it in GitHub Desktop.
Save reinh/76945 to your computer and use it in GitHub Desktop.
module Enumerable
def comprehend(&block)
map(&block).compact
end
def comprehend2(&block)
inject([]){|arr, x| result = block[x]; arr << result if result; arr}
end
def comprehend3(&block)
arr = []
each do |x|
result = block[x]
arr << result if result
end
arr
end
def comprehend4(&block)
map(&block).reject{|x| x.nil?}
end
end
require "benchmark"
block = lambda {|x| x * 2 if x > 50 }
arr = (1..100_000).to_a
TESTS = 10
Benchmark.bmbm do |results|
results.report("map, compact") {TESTS.times{arr.comprehend(&block)}}
results.report("inject") {TESTS.times{arr.comprehend2(&block)}}
results.report("accumulator") {TESTS.times{arr.comprehend3(&block)}}
results.report("map, reject") {TESTS.times{arr.comprehend4(&block)}}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment