Skip to content

Instantly share code, notes, and snippets.

@conorgriffin
Last active August 29, 2015 14:07
Show Gist options
  • Save conorgriffin/0a6cecc8f0ebf5c3ca63 to your computer and use it in GitHub Desktop.
Save conorgriffin/0a6cecc8f0ebf5c3ca63 to your computer and use it in GitHub Desktop.
Benchmark ruby methods to process array of strings of words into array of unique individual words
require 'set'
require 'benchmark/ips'
class Array
def process_old()
self.join(" ").split().uniq
end
def process_new_1()
unique = Set.new()
self.each {
|str|
unique.merge(str.split)
}
unique.to_a
end
def process_new_2()
unique = Hash.new
self.each { |words| words.split.each { |word| unique[word] = :present unless unique[word] }}
unique.keys
end
def process_new_3()
unique = Hash.new
self.each { |words| words.split.each { |word| unique[word] = nil }}
unique.keys
end
end
list = [
"a b c", "a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r",
"a b c", "a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "a b c",
"a b d c d w a l d i q p", "c q v w f j", "c d", "x y z", "a c x r d u", "d o g", "g l a s s", "p l u g", "d o o r", "m a c h i n e",
"o r n a m e n t", "a u d i", "s h e d", "g a r d e n", "w a l l", "t a b l e", "c h a i r", "b e a k e r", "k e t t l e", "l u n c h"
]
Benchmark.ips do |x|
x.report('Old:') do
list.process_old
end
x.report('New 1:') do
list.process_new_1
end
x.report('New 2:') do
list.process_new_2
end
x.report('New 3:') do
list.process_new_3
end
x.compare!
end
-$ ruby array_process_benchmark.rb
Calculating -------------------------------------
Old: 379 i/100ms
New 1: 146 i/100ms
New 2: 301 i/100ms
New 3: 273 i/100ms
-------------------------------------------------
Old: 3810.9 (±1.7%) i/s - 19329 in 5.073405s
New 1: 1531.1 (±0.4%) i/s - 7738 in 5.053946s
New 2: 2999.9 (±3.5%) i/s - 15050 in 5.023124s
New 3: 2740.9 (±0.8%) i/s - 13923 in 5.080060s
Comparison:
Old:: 3810.9 i/s
New 2:: 2999.9 i/s - 1.27x slower
New 3:: 2740.9 i/s - 1.39x slower
New 1:: 1531.1 i/s - 2.49x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment