回答:
puts 'abcdefg'.start_with?('abc') #=> true
[編集]これは、この質問の前に知らなかったものstart_with
です。複数の引数を取ります。
'abcdefg'.start_with?( 'xyz', 'opq', 'ab')
start_with?
、MRI 1.9にはRailsと同様にあります。
String#start_with?
ます。
start_with?
ます。私はそれを試すためにirbをロードしたときにそれをタイプミスしたと思います。
starts_with?
。これは1.8.7以降では単ににエイリアスされていstart_with?
ます。
ここではいくつかの方法が提示されているので、どれが最も高速かを調べたかったのです。Ruby 1.9.3p362を使用:
irb(main):001:0> require 'benchmark'
=> true
irb(main):002:0> Benchmark.realtime { 1.upto(10000000) { "foobar"[/\Afoo/] }}
=> 12.477248
irb(main):003:0> Benchmark.realtime { 1.upto(10000000) { "foobar" =~ /\Afoo/ }}
=> 9.593959
irb(main):004:0> Benchmark.realtime { 1.upto(10000000) { "foobar"["foo"] }}
=> 9.086909
irb(main):005:0> Benchmark.realtime { 1.upto(10000000) { "foobar".start_with?("foo") }}
=> 6.973697
だからstart_with?
、束の中で最も速いようです。
Ruby 2.2.2p95以降のマシンで更新された結果:
require 'benchmark'
Benchmark.bm do |x|
x.report('regex[]') { 10000000.times { "foobar"[/\Afoo/] }}
x.report('regex') { 10000000.times { "foobar" =~ /\Afoo/ }}
x.report('[]') { 10000000.times { "foobar"["foo"] }}
x.report('start_with') { 10000000.times { "foobar".start_with?("foo") }}
end
user system total real
regex[] 4.020000 0.000000 4.020000 ( 4.024469)
regex 3.160000 0.000000 3.160000 ( 3.159543)
[] 2.930000 0.000000 2.930000 ( 2.931889)
start_with 2.010000 0.000000 2.010000 ( 2.008162)
"FooBar".downcase.start_with?("foo")
。
steenslagによって言及された方法は簡潔であり、質問の範囲を考えると、それは正解と見なされるべきです。ただし、これは正規表現で実現できることも知っておく価値があります。これは、Rubyにまだ慣れていない場合は、学ぶべき重要なスキルです。
Rubularで遊びましょう:http ://rubular.com/
ただし、この場合、左側の文字列が「abc」で始まる場合、次のrubyステートメントはtrueを返します。右側の正規表現リテラルの\ Aは、「文字列の始まり」を意味します。ルーブラルで遊びましょう-物事がどのように機能するかが明らかになります。
'abcdefg' =~ /\Aabc/