fastruby / fastruby/fast-ruby

Fast Ruby for hash_update_vs_hash_brackets

Aperta
#194 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Suggestion
Lingua principale
Ruby
Stelle
5.7k
Fork
371
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

**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()?

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.