अगर रूबी (बिना पटरियों के) के साथ एक स्ट्रिंग शुरू होती है तो सबसे अच्छा तरीका क्या है?
अगर रूबी (बिना पटरियों के) के साथ एक स्ट्रिंग शुरू होती है तो सबसे अच्छा तरीका क्या है?
जवाबों:
puts 'abcdefg'.start_with?('abc') #=> true
[संपादित करें] यह कुछ ऐसा है जो मुझे इस सवाल से पहले नहीं पता था: start_with
कई तर्क देता है।
'abcdefg'.start_with?( 'xyz', 'opq', 'ab')
start_with?
, लेकिन MRI 1.9 करता है, जैसा कि रेल करता है।
String#start_with?
।
start_with?
। मुझे लगता है कि मैं इसे टाइप करूँगा जब मैंने इसे आज़माने के लिए irb को लोड किया।
starts_with?
, जो 1.8.7 और इसके बाद के संस्करण को केवल उर्फ किया जाता है start_with?
।
चूंकि यहां कई तरीके प्रस्तुत किए गए हैं, मैं यह पता लगाना चाहता था कि कौन सा सबसे तेज था। रूबी 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?
गुच्छा का सबसे तेज है।
रूबी 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")
:।
स्टेन्सलैग द्वारा उल्लिखित विधि का अर्थ है, और इस प्रश्न के दायरे को देखते हुए इसे सही उत्तर माना जाना चाहिए। हालांकि यह भी जानने योग्य है कि यह एक नियमित अभिव्यक्ति के साथ प्राप्त किया जा सकता है, जो कि अगर आप रूबी में पहले से परिचित नहीं हैं, तो सीखने के लिए एक महत्वपूर्ण कौशल है।
रुबुलर के साथ एक नाटक करें: http://rubular.com/
लेकिन इस मामले में, निम्न रूबी कथन सही होगा यदि बाईं ओर स्ट्रिंग 'एबीसी' से शुरू होती है। सही पर रेगेक्स शाब्दिक अर्थ में 'ए' स्ट्रिंग की शुरुआत है। रूबुलर के साथ एक नाटक करें - यह स्पष्ट हो जाएगा कि चीजें कैसे काम करती हैं।
'abcdefg' =~ /\Aabc/