Skip to content

Commit 9d6c54c

Browse files
committed
added the fastest method to create a changed copy of a string.
1 parent f63cf7c commit 9d6c54c

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

README.md

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -912,22 +912,27 @@ Comparison:
912912
See [#59](https://github.com/JuanitoFatas/fast-ruby/pull/59) and [#62](https://github.com/JuanitoFatas/fast-ruby/pull/62) for discussions.
913913

914914

915-
##### `String#gsub` vs `String#sub` [code](code/string/gsub-vs-sub.rb)
915+
##### `String#gsub` vs `String#sub` vs `String#[]=` [code](code/string/gsub-vs-sub.rb)
916916

917917
```
918918
$ ruby -v code/string/gsub-vs-sub.rb
919-
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
919+
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
920920
921+
Warming up --------------------------------------
922+
String#gsub 48.360k i/100ms
923+
String#sub 45.739k i/100ms
924+
String#dup["string"]= 59.896k i/100ms
921925
Calculating -------------------------------------
922-
String#gsub 35.724k i/100ms
923-
String#sub 42.426k i/100ms
924-
-------------------------------------------------
925-
String#gsub 486.614k (± 5.4%) i/s - 2.429M
926-
String#sub 611.259k (± 4.6%) i/s - 3.055M
926+
String#gsub 647.666k (± 3.3%) i/s - 3.240M in 5.008504s
927+
String#sub 756.665k (± 2.0%) i/s - 3.796M in 5.019235s
928+
String#dup["string"]= 917.873k (± 1.8%) i/s - 4.612M in 5.026253s
927929
928930
Comparison:
929-
String#sub: 611259.4 i/s
930-
String#gsub: 486613.5 i/s - 1.26x slower
931+
String#dup["string"]=: 917873.1 i/s
932+
String#sub: 756664.7 i/s - 1.21x slower
933+
String#gsub: 647665.6 i/s - 1.42x slower
934+
935+
931936
```
932937

933938
##### `String#gsub` vs `String#tr` [code](code/string/gsub-vs-tr.rb)

code/string/gsub-vs-sub.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,15 @@ def fast
1010
URL.sub('http://', 'https://')
1111
end
1212

13+
def fastest
14+
str = URL.dup
15+
str['http://'] = 'https://'
16+
str
17+
end
18+
1319
Benchmark.ips do |x|
1420
x.report('String#gsub') { slow }
1521
x.report('String#sub') { fast }
22+
x.report('String#dup["string"]=') { fastest }
1623
x.compare!
1724
end

0 commit comments

Comments
 (0)