Skip to content

Commit 450d9cb

Browse files
committed
Added: Hash#values_at vs Hash#slice#values.
1 parent 7c87d13 commit 450d9cb

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,26 @@ Array#each_w/_object: 1352851.8 i/s - 1.88x slower
10381038
Hash#select-include : 760944.2 i/s - 3.34x slower
10391039
```
10401040

1041+
##### `Hash#values_at` vs `Hash#slice#values`
1042+
[code](code/hash/values_at-vs-slice-values.rb)
1043+
1044+
To select hash values by keys.
1045+
1046+
```
1047+
$ ruby -v code/hash/values_at-vs-slice-values.rb
1048+
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]
1049+
Warming up --------------------------------------
1050+
Hash#values_at 284.628k i/100ms
1051+
Hash#slice#values 230.279k i/100ms
1052+
Calculating -------------------------------------
1053+
Hash#values_at 7.179M (± 7.4%) i/s - 35.863M in 5.034179s
1054+
Hash#slice#values 4.458M (± 4.1%) i/s - 22.337M in 5.019922s
1055+
1056+
Comparison:
1057+
Hash#values_at : 7178610.6 i/s
1058+
Hash#slice#values: 4458017.0 i/s - 1.61x slower
1059+
```
1060+
10411061

10421062
### Proc & Block
10431063

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
require 'benchmark/ips'
2+
3+
HASH = {
4+
one: 'foo',
5+
two: 'bar',
6+
three: 'baz',
7+
four: 'qux'
8+
}
9+
KEYS = %i[one three]
10+
11+
def fast
12+
HASH.values_at(*KEYS)
13+
end
14+
15+
def slow
16+
HASH.slice(*KEYS).values
17+
end
18+
19+
Benchmark.ips do |x|
20+
x.report('Hash#values_at ') { fast }
21+
x.report('Hash#slice#values') { slow }
22+
x.compare!
23+
end

0 commit comments

Comments
 (0)