fastruby / fastruby/fast-ruby

Fast Ruby for hash_update_vs_hash_brackets

Open
#194 0 comments 0 reactions 0 assignees View on GitHub
Suggestion
Dominant language
Ruby
Stars
5.7k
Forks
371
PR merge metrics
No merged PRs in 30d

Description

**Hash#update** is an alias for **Hash#merge!**

Currently we have `merge_bang_vs_[]=` which suggests that **Hash#[]=** is faster and **Hash#merge!()** is slower.
But we dont have any suggestions for `update_vs_[]=` i.e., **Hash#update()** vs **Hash#[]=**.

```
require 'benchmark/ips'

ENUM = (1..100)

def fast
ENUM.each_with_object({}) do |e, h|
h[e] = e
end
end

def slow
ENUM.each_with_object({}) do |e, h|
h.update(e => e)
end
end

Benchmark.ips do |x|
x.report('Hash#[]=') { fast }
x.report('Hash#update') { slow }
x.compare!
end
```

```
##### `Hash#update` vs `Hash#[]=` [code](code/hash/update-vs-\[\]=.rb)

$ ruby -v code/hash/update-vs-\[\]=.rb
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin18]

Warming up --------------------------------------
Hash#[]= 7.453k i/100ms
Hash#update 4.311k i/100ms
Calculating -------------------------------------
Hash#[]= 74.764k (± 1.9%) i/s - 380.103k in 5.085962s
Hash#update 43.220k (± 0.8%) i/s - 219.861k in 5.087364s

Comparison:
Hash#[]=: 74764.0 i/s
Hash#update: 43220.1 i/s - 1.73x (± 0.00) slower
```

Can we extend this to Hash#update()?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.