Skip to content

Commit

Permalink
Add String#start_with? vs String#[].==
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathanhefner committed May 24, 2016
1 parent cec53a2 commit 4b696f4
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,22 @@ Comparison:
String#=~: 891124.1 i/s - 3.30x slower
```

##### `String#start_with?` vs `String#[].==` [code](code/string/start_with-vs-substring-==.rb)

```
ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-cygwin]
Calculating -------------------------------------
String#start_with? 54.979k (± 0.4%) i/s - 279.450k in 5.082987s
String#[0, n] == 31.488k (± 0.2%) i/s - 160.166k in 5.086555s
String#[0...n] == 20.715k (± 0.3%) i/s - 105.300k in 5.083218s
Comparison:
String#start_with?: 54978.5 i/s
String#[0, n] ==: 31488.3 i/s - 1.75x slower
String#[0...n] ==: 20715.5 i/s - 2.65x slower
```

##### `Regexp#===` vs `String#match` vs `String#=~` [code ](code/string/===-vs-=~-vs-match.rb)

> :warning: <br>
Expand Down
24 changes: 24 additions & 0 deletions code/string/start_with-vs-substring-==.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
require 'benchmark/ips'

PREFIX = '_'
STRINGS = (0..99).map{|n| "#{PREFIX if n.odd?}#{n}" }

def fast
STRINGS.each{|s| s.start_with?(PREFIX) }
end

def slow_length
STRINGS.each{|s| s[0, PREFIX.length] == PREFIX }
end

def slow_range
STRINGS.each{|s| s[0...PREFIX.length] == PREFIX }
end


Benchmark.ips do |x|
x.report('String#start_with?') { fast }
x.report('String#[0, n] ==') { slow_length }
x.report('String#[0...n] ==') { slow_range }
x.compare!
end

0 comments on commit 4b696f4

Please sign in to comment.