Skip to content

Instantly share code, notes, and snippets.

@cupakromer
Last active August 29, 2015 13:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cupakromer/9327186 to your computer and use it in GitHub Desktop.
Save cupakromer/9327186 to your computer and use it in GitHub Desktop.
If you may have an array of arrays, `flat_map` is probably the way to go
require "benchmark"
require "benchmark/ips"
def arr
Array.new(1_000, 1)
end
def arr_of_arrs
Array.new(1_000){ (1..1000).to_a }
end
single = arr
nested = arr_of_arrs
puts "Already Flat Array:"
Benchmark.ips do |r|
r.report("just flatten") do
single.flatten
end
r.report("just flatten(1)") do
single.flatten(1)
end
r.report("flat map identity") do
single.flat_map{ |x| x }
end
end
puts
puts "Array of Arrays:"
Benchmark.ips do |r|
r.report("just flatten") do
nested.flatten
end
r.report("just flatten(1)") do
nested.flatten(1)
end
r.report("flat map identity") do
nested.flat_map{ |x| x }
end
end
ruby flatten_map_bm.rb
Already Flat Array:
Calculating -------------------------------------
just flatten 1390 i/100ms
just flatten(1) 1452 i/100ms
flat map identity 525 i/100ms
-------------------------------------------------
just flatten 15291.6 (±6.0%) i/s - 76450 in 5.018510s
just flatten(1) 14367.3 (±14.6%) i/s - 71148 in 5.095526s
flat map identity 5466.3 (±7.6%) i/s - 27300 in 5.029275s
Array of Arrays:
Calculating -------------------------------------
just flatten 1 i/100ms
just flatten(1) 1 i/100ms
flat map identity 13 i/100ms
-------------------------------------------------
just flatten 13.8 (±7.2%) i/s - 69 in 5.061899s
just flatten(1) 13.4 (±7.4%) i/s - 67 in 5.061220s
flat map identity 133.2 (±29.3%) i/s - 624 in 5.146658s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment