यह some other question में चर्चा से एक स्पिन-ऑफ है।स्ट्रिंग विभाजन के बिना पार्स
मान लीजिए कि मुझे बहुत लंबे तारों की एक बड़ी संख्या का विश्लेषण करना है। प्रत्येक स्ट्रिंग में व्हाइटस्पेस द्वारा अलग double
एस (निश्चित रूप से पाठ प्रतिनिधित्व में) का अनुक्रम होता है। मुझे double
एस को List<double>
में पार्स करने की आवश्यकता है।
मानक पार्सिंग तकनीक (string.Split
+ double.TryParse
का उपयोग करके) काफी धीमी प्रतीत होती है: प्रत्येक संख्या के लिए हमें एक स्ट्रिंग आवंटित करने की आवश्यकता होती है।
मैंने इसे पुराने सी-जैसा तरीका बनाने की कोशिश की: शुरुआत के सूचकांक और संख्याओं वाले सबस्ट्रिंग्स के अंत की गणना करें, और अतिरिक्त स्ट्रिंग बनाने के बिना इसे "जगह में" पार्स करें। (http://ideone.com/Op6h0 देखें, प्रासंगिक हिस्सा दिखाया नीचे।)
int startIdx, endIdx = 0;
while(true)
{
startIdx = endIdx;
// no find_first_not_of in C#
while (startIdx < s.Length && s[startIdx] == ' ') startIdx++;
if (startIdx == s.Length) break;
endIdx = s.IndexOf(' ', startIdx);
if (endIdx == -1) endIdx = s.Length;
// how to extract a double here?
}
string.IndexOf
की एक अधिभार, किसी दिए गए स्ट्रिंग के भीतर ही खोज नहीं है, लेकिन मैं-स्ट्रिंग से एक डबल पार्स करने के लिए एक विधि को खोजने में असफल है, वास्तव में निकालने कि बिना पहले सबस्ट्रिंग।
क्या किसी के पास कोई विचार है?
आपने साबित कर यह वास्तव में एक अड़चन है है? मुझे यह करने के किसी भी तरीके से * पता नहीं है, लेकिन मुझे निश्चित रूप से सूक्ष्म अनुकूलन से पहले एक समस्या होने का कुछ सबूत चाहिए। –
@ जोन: वास्तव में नहीं। सवाल लिंक किए गए प्रश्न (http://stackoverflow.com/questions/10053449/extract-numbers-from-string) पर चर्चा पर आधारित है। उसके लिए खेद है। – Vlad
पर्याप्त मेला। मुझे संदेह है कि एक हाथ से लिखित पार्स दिनचर्या संभवतः अनुकूलित-अनुकूलित अनुभव के साथ धीमी होगी-बीसीएल टीम के साथ-साथ बहुत सारी अनुभव विधि :) –