Last active
August 29, 2015 13:56
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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