2011-03-27 10 views
5

मुझे जावास्क्रिप्ट में बड़े टेक्स्ट दस्तावेज़ों (उदाहरण के लिए, स्रोत कोड फ़ाइलों) को कुशलतापूर्वक संपादित करने की आवश्यकता है।क्या जावास्क्रिप्ट में बड़े तारों को कुशलता से संपादित करने के लिए कोई पुस्तकालय हैं?

insertAtPosition(n, str) और deleteAtPosition(n, length) तेज़ होना चाहिए।

एक बेवकूफ स्ट्रिंग कार्यान्वयन धीमा है क्योंकि प्रत्येक ऑपरेशन को दस्तावेज़ की सामग्री को एक नई स्ट्रिंग में कॉपी करने की आवश्यकता होती है।

ऐसा करने के कुछ कुशल तरीके हैं। मैं लाइनों की एक सरणी का उपयोग कर सकता हूं (Ace उर्फ ​​बेस्पीन यह करता है), लेकिन सुपर लंबी लाइनें या कई छोटी लाइनें होने पर यह धीमा हो जाएगा। एक बेहतर कार्यान्वयन skip lists या कुछ अन्य चालाक डेटा संरचना का उपयोग करेगा।

लेकिन, मैं उम्मीद करता हूं कि किसी ने पहले से ही ऐसी चीज लागू की है।

क्या कोई पुस्तकालय हैं जो पहले से ही ऐसा कर रहे हैं? मुझे Google के साथ कुछ भी उपयोगी नहीं लगता है - क्या इस एल्गोरिदम समस्या के लिए एक आम नाम है?

+2

कोशिश रस्सियों: https://secure.wikimedia.org/wikipedia/en/wiki/Rope_%28computer_science%29 –

+0

शायद का उपयोग 'source.split ('') 'को अक्षरों में तोड़ने के लिए, फिर मूल Array.splice का उपयोग करें, जो ओ (एन) सबसे खराब है। – Reid

+0

@ रीड: स्ट्रिंग्स का बेवकूफ हेरफेर पहले से ही ओ (एन) है, ताकि कुछ भी हासिल न हो। यदि जावास्क्रिप्ट में सरणी प्रति-तत्व स्मृति ओवरहेड हैं, तो आपका दृष्टिकोण वास्तव में धीमा हो जाएगा। –

उत्तर

2

मुझे नहीं लगता कि ऐसा करने के लिए कोई अन्य पुस्तकालय हैं, इसलिए मैंने इसे स्किप सूचियों का उपयोग करके स्वयं लागू किया। पेड़ डेटा संरचना का उपयोग करना तेज़ हो सकता है, लेकिन सूचियों को छोड़ना आसान है और क्लोजर संकलित जावास्क्रिप्ट केवल 2.5 केबी है।

अगर वहाँ एक ही समस्या के साथ किसी और को है, का आनंद लें:

https://github.com/josephg/jumprope

संबंधित मुद्दे

 संबंधित मुद्दे