From 68d874bb0338a63311c191d17bef083e5b61e392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Svoboda?= Date: Fri, 5 May 2017 16:11:34 +0200 Subject: [PATCH] Hash#select#values vs Hash#values#select vs Hash#values#compact --- code/hash/select-vs-values.compact.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 code/hash/select-vs-values.compact.rb diff --git a/code/hash/select-vs-values.compact.rb b/code/hash/select-vs-values.compact.rb new file mode 100644 index 0000000..e1cf5c4 --- /dev/null +++ b/code/hash/select-vs-values.compact.rb @@ -0,0 +1,24 @@ +require 'benchmark/ips' + +ARRAY = Array.new(1000) { Random.rand } +VALUES = ARRAY.map { |v| v < 0.5 } +HASH = Hash[ARRAY.zip(VALUES)] + +def fastest + HASH.values.compact +end + +def fast + HASH.values.select { |v| v } +end + +def slow + HASH.select { |_k, v| v }.values +end + +Benchmark.ips do |x| + x.report('Hash#select#values') { slow } + x.report("Hash#values.select") { fast } + x.report("Hash#values#compact") { fastest } + x.compare! +end \ No newline at end of file