पहले भाग का जवाब देने का सबसे आसान तरीका हमेशा के रूप में, अपने वास्तविक डेटा के साथ बेंचमार्क करना है।
require 'benchmark'
Benchmark.bm do |x|
x.report { 50000.times { a = '[email protected]'.split('@')[0] } }
x.report { 50000.times { a = '[email protected]'[/[^@]+/] } }
end
(मेरी सेटअप पर) का कहना है: उदाहरण के लिए:
user system total real
0.130000 0.010000 0.140000 ( 0.130946)
0.090000 0.000000 0.090000 ( 0.096260)
तो regex समाधान एक छोटा सा तेजी से दिखता है, लेकिन अंतर बड़ी मुश्किल से 50 000 पुनरावृत्तियों के साथ ध्यान देने योग्य है। ओटीओएच, रेगेक्स समाधान कहता है कि आपका क्या मतलब है ("मुझे पहले @
से पहले सब कुछ दें") जबकि split
समाधान आपके वांछित परिणाम को थोड़ा चौराहे में प्राप्त करता है।
split
दृष्टिकोण संभवतः धीमा है क्योंकि इसे पूरे स्ट्रिंग को टुकड़ों में विभाजित करने के लिए स्कैन करना है, फिर टुकड़ों की एक सरणी बनाना है, और अंत में सरणी के पहले तत्व को निकालना और बाकी को फेंक देना; मुझे नहीं पता कि वीएम इतनी चतुर है कि यह पहचानने के लिए पर्याप्त है कि उसे सरणी बनाने की आवश्यकता नहीं है, इसलिए यह थोड़ा अनुमान लगाने का काम है।
जहां तक आपके दूसरे प्रश्न का संबंध है, तुम क्या मतलब है कहते हैं:
my_string[/[^.]+/]
तुम सब कुछ चाहते हैं इससे पहले कि पहली अवधि तो कहते हैं न कि "पहली हिस्सा है कि किया जाता है की तुलना में" एक अवधि तक सब कुछ " इन पात्रों में से (जिसमें एक अवधि शामिल नहीं होती है) "।
स्रोत
2011-09-23 19:09:13
मुझे संदेह है कि ई-मेल पते से निपटने के दौरान एक उल्लेखनीय अंतर होगा (जब तक कि आप लाखों प्रति सेकंड संसाधित नहीं कर रहे हों ...)। लेकिन आप खुद दोनों को मापते हैं और पता नहीं लगाते? –