@@ -805,56 +805,43 @@ Comparison:
805
805
Hash#keys.each: 869262.3 i/s - 1.21x slower
806
806
```
807
807
808
- #### ` Hash#key? ` instead of ` Hash#keys.include? ` and ` Hash#value? ` instead of ` Hash#values .include? ` [ code] ( code/hash/keys-include-vs-key.rb )
808
+ #### ` Hash#key? ` vs. ` Hash#[] ` vs. ` Hash#keys .include? ` [ code] ( code/hash/keys-include-vs- \[\] -vs-key.rb )
809
809
810
810
> ` Hash#keys.include? ` allocates an array of keys and performs an O(n) search; <br >
811
- > ` Hash#key? ` performs an O(1) hash lookup without allocating a new array. <br >
812
- > ` Hash#values.include? ` allocates an array of values and performs an O(n) search; <br >
813
- > ` Hash#value? ` performs an O(n) search without allocating a new array.
811
+ > ` Hash#key? ` performs an O(1) hash lookup without allocating a new array; <br >
812
+ > ` Hash#[] ` performs an O(1) hash lookup as well.
814
813
815
814
```
816
- $ ruby -v code/hash/keys-include-vs-key.rb
815
+ $ ruby -v code/hash/keys-include-vs-\[\]-vs- key.rb
817
816
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
818
817
819
818
Calculating -------------------------------------
820
- Hash#key? (key is present)
821
- 5.809M (± 2.1%) i/s - 29.038M in 5.000966s
822
- Hash#keys.include? (key is present)
823
- 8.914k (± 3.9%) i/s - 44.564k in 5.007900s
819
+ Hash#keys.include? 8.293k (± 6.1%) i/s - 41.964k in 5.083215s
820
+ Hash#[] 6.412M (± 3.1%) i/s - 32.160M in 5.020295s
821
+ Hash#key? 6.616M (± 5.0%) i/s - 33.178M in 5.030955s
824
822
825
823
Comparison:
826
- Hash#key? (key is present): 5809154.8 i/s
827
- Hash#keys.include? (key is present): 8913.6 i/s - 651.72x slower
828
-
829
- Calculating -------------------------------------
830
- Hash#key? (key is absent)
831
- 7.691M (± 1.9%) i/s - 38.520M in 5.010779s
832
- Hash#keys.include? (key is absent)
833
- 2.991k (± 2.1%) i/s - 15.100k in 5.051475s
824
+ Hash#key?: 6615589.2 i/s
825
+ Hash#[]: 6412217.3 i/s - same-ish: difference falls within error
826
+ Hash#keys.include?: 8293.2 i/s - 797.71x slower
827
+ ```
834
828
835
- Comparison:
836
- Hash#key? (key is absent): 7690551.0 i/s
837
- Hash#keys.include? (key is absent): 2990.5 i/s - 2571.62x slower
829
+ ##### ` Hash#value? ` instead of ` Hash#values.include? ` [ code] ( code/hash/values-include-vs-value.rb )
838
830
839
- Calculating -------------------------------------
840
- Hash#value? (value is present)
841
- 14.780k (± 0.9%) i/s - 74.970k in 5.072806s
842
- Hash#values.include? (value is present)
843
- 14.019k (± 4.4%) i/s - 70.533k in 5.041592s
831
+ > ` Hash#values.include? ` allocates an array of values and performs an O(n) search; <br >
832
+ > ` Hash#value? ` performs an O(n) search without allocating a new array.
844
833
845
- Comparison:
846
- Hash#value? (value is present): 14780.1 i/s
847
- Hash#values.include? (value is present): 14019.0 i/s - 1.05x slower
834
+ ```
835
+ $ ruby -v code/hash/values-include-vs-value.rb
836
+ ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
848
837
849
838
Calculating -------------------------------------
850
- Hash#value? (value is absent)
851
- 2.640k (± 2.1%) i/s - 13.200k in 5.002081s
852
- Hash#values.include? (value is absent)
853
- 2.930k (± 6.1%) i/s - 14.994k in 5.144089s
839
+ Hash#values.include? 23.187k (± 4.3%) i/s - 117.720k in 5.086976s
840
+ Hash#value? 38.395k (± 1.0%) i/s - 194.361k in 5.062696s
854
841
855
842
Comparison:
856
- Hash#values.include? (value is absent): 2930 .0 i/s
857
- Hash#value? (value is absent) : 2640.1 i/s - 1.11x slower
843
+ Hash#value?: 38395 .0 i/s
844
+ Hash#values.include? : 23186.8 i/s - 1.66x slower
858
845
```
859
846
860
847
##### ` Hash#merge! ` vs ` Hash#[]= ` [ code] ( code/hash/merge-bang-vs-\[\] =.rb )
0 commit comments