programing

루비에서 문자열이 다른 문자열로 시작하는 경우 어떻게 찾을 수 있습니까?

showcode 2023. 6. 4. 10:45
반응형

루비에서 문자열이 다른 문자열로 시작하는 경우 어떻게 찾을 수 있습니까?

루비(레일 없음)에서 문자열이 다른 문자열로 시작하는 경우 찾는 가장 좋은 방법은 무엇입니까?

puts 'abcdefg'.start_with?('abc')  #=> true

[edit] 이 질문 전에는 몰랐던 내용입니다.start_with?다중 인수를 사용합니다.

'abcdefg'.start_with?( 'xyz', 'opq', 'ab')

여기에는 여러 가지 방법이 제시되어 있기 때문에, 저는 어떤 방법이 가장 빠른지 알고 싶었습니다.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)

스텐슬래그가 언급한 방법은 간결하며, 문제의 범위를 고려할 때 정답으로 간주되어야 합니다.그러나 정규 표현을 사용하면 이를 달성할 수 있다는 것도 알아야 합니다. 정규 표현은 루비에 대해 아직 잘 모르신다면 배워야 할 중요한 기술입니다.

루불라와 함께 놀자: http://rubular.com/

그러나 이 경우 왼쪽 문자열이 'abc'로 시작하면 다음 루비 문이 true로 반환됩니다.오른쪽 정규식 리터럴의 \A는 '문자열의 시작'을 의미합니다.루블라를 가지고 놀아라 - 일이 어떻게 돌아가는지 분명해질 것입니다.

'abcdefg' =~  /\Aabc/ 

좋아해요

if ('string'[/^str/]) ...

언급URL : https://stackoverflow.com/questions/4168543/how-do-i-find-if-a-string-starts-with-another-string-in-ruby

반응형