यहाँ बहुत सारे उत्तर हैं, और ये सभी दो तरीकों पर आधारित हैं:
- METHOD1: दो सब्सट्रिंग्स का उपयोग करके स्ट्रिंग को विभाजित करें और उनके बीच के चरित्र को सामान करें
- METHOD2: स्ट्रिंग को कैरेक्टर ऐरे में कन्वर्ट करें, एक ऐरे मेंबर को बदलें और उसमें शामिल हों
व्यक्तिगत रूप से, मैं इन दो तरीकों का उपयोग विभिन्न मामलों में करूंगा। मुझे समझाने दो।
@ फैबियोफम्स: आपकी विधि वह थी जिसका मैंने शुरू में उपयोग किया था और मुझे डर था कि यह बहुत सारे पात्रों के साथ स्ट्रिंग पर खराब है। हालांकि, सवाल यह है कि बहुत सारे चरित्र क्या हैं? मैंने इसे 10 "लोरेम इप्सम" पैराग्राफ पर परीक्षण किया और इसमें कुछ मिलीसेकंड लगे। फिर मैंने इसे 10 गुना बड़े स्ट्रिंग पर परीक्षण किया - वास्तव में कोई बड़ा अंतर नहीं था। हम्म।
@vsync, @Cory Mawhorter: आपकी टिप्पणियां असंदिग्ध हैं; हालांकि, फिर से, एक बड़ी स्ट्रिंग क्या है? मैं मानता हूं कि 32 के लिए ... 100kb का प्रदर्शन बेहतर होना चाहिए और चरित्र प्रतिस्थापन के इस एक ऑपरेशन के लिए सब-वेरिएंट का उपयोग करना चाहिए।
लेकिन क्या होगा अगर मुझे काफी कुछ प्रतिस्थापन करना पड़े?
मुझे यह साबित करने के लिए अपने स्वयं के परीक्षण करने की आवश्यकता थी कि उस मामले में क्या तेज है। मान लीजिए कि हमारे पास एक एल्गोरिथ्म है जो अपेक्षाकृत कम स्ट्रिंग को हेरफेर करेगा जिसमें 1000 वर्ण शामिल हैं। हम उम्मीद करते हैं कि औसत में उस स्ट्रिंग के प्रत्येक चरित्र को ~ 100 बार बदल दिया जाएगा। तो, कोड कुछ इस तरह का परीक्षण करने के लिए है:
var str = "... {A LARGE STRING HERE} ...";
for(var i=0; i<100000; i++)
{
var n = '' + Math.floor(Math.random() * 10);
var p = Math.floor(Math.random() * 1000);
// replace character *n* on position *p*
}
मैंने इसके लिए एक पहेली बनाई, और यह यहाँ है । दो परीक्षण, TEST1 (विकल्प) और TEST2 (सरणी रूपांतरण) हैं।
परिणाम:
ऐसा लगता है कि सरणी रूपांतरण परिमाण के 2 आदेशों द्वारा प्रतिस्थापित होता है! तो - यहाँ क्या हुआ ???
वास्तव में ऐसा होता है कि TEST2 में सभी ऑपरेशन सरणी पर ही किए जाते हैं, जैसे असाइनमेंट एक्सप्रेशन strarr2[p] = n
। असाइनमेंट वास्तव में एक बड़े स्ट्रिंग पर प्रतिस्थापित करने की तुलना में तेज है, और यह स्पष्ट है कि यह जीतने वाला है।
तो, यह काम के लिए सही उपकरण चुनने के बारे में है। फिर।
str[0] = 'x'
कोई भी त्रुटि नहीं लगती है, फिर भी वांछित प्रभाव नहीं है!