मैं अपने कोड में एक वर्ग जहां मैं जानता हूँ कि मैं एक सरणी की आवश्यकता होगी, और मुझे पता है कि उनकी संख्या कितनी तत्वों कि सरणी है की आवश्यकता होगी। कोड के इस खंड को दोहराया जाएगा, इसलिए मुझे उस आकार में उस सरणी को शुरू करने के लिए कुछ बहुत बड़ी बचत बचत मिल सकती है, जिसे मुझे पता है कि इसकी आवश्यकता होगी और फिर इसे भरने के लिए केवल आइटम को दबाकर (धक्का देना ओ (n) पहले से बनाई गई रिक्त स्थान भरने के विरोध में, जो ओ (1) होगा)।क्या मैं पर्ल में दिए गए आकार में एक ऐरे शुरू कर सकता हूं?
उसने कहा, मुझे किसी दिए गए आकार में सरणी शुरू करने का कोई शानदार तरीका नहीं दिख रहा है, और मुझे नहीं पता कि क्यों। मैं जानता हूँ कि मैं कर सकते हैं:
my @array; $array[49] =0;
एक 50 आइटम सरणी प्राप्त करने के लिए, पर है कि वास्तव में मेरे लिए बदसूरत लग रहा है और मैं लगता है मानो वहाँ एक बेहतर तरीका होना चाहिए। विचार?
कुछ भी नहीं गलत हैं यह व्यवस्था करने के लिए स्मृति लौटने के साथ मदद कर सकता है preallocating सरणी के साथ, लेकिन यह एक समयपूर्व और सूक्ष्म अनुकूलन की तरह गंध करता है। आपको लगता है कि 'पुश' ओ (एन) क्यों है? – mob
अभी कोई लिंक ढूंढने का कोई समय नहीं है, लेकिन लंबी कहानी छोटी है: पुशिंग को अंतिम खुली जगह खोजने के लिए सरणी के माध्यम से लूपिंग की आवश्यकता होती है (वैसे भी जिस तरह से पुश आमतौर पर लागू किया जाता है, वैसे भी, हालांकि अब मैं इसके बारे में सोच रहा हूं, सामान्य रूप से सरणी की बजाय एक सिंगल लिंक्ड सूची के लिए)। क्या आप कह रहे हैं कि यह पर्ल में अलग-अलग लागू किया गया है? – Eli
हाँ, यह थोड़ा अलग है। पर्ल सूचियां सामने और पीछे दोनों में कुछ ढीले के साथ सरणी हैं। वे अपने आकार को भी जानते हैं, इसलिए 'पुश' और 'अनशिफ्ट' दोनों आमतौर पर ओ (1) होते हैं। यदि ढीला सभी का उपयोग हो जाता है, तो पर्ल अधिक जगह के साथ एक नई सरणी को फिर से आवंटित करेगा। पुनर्वितरण एक ओ (एन) ऑपरेशन है लेकिन यह केवल ~ ~ लॉग (एन) पुश ऑपरेशंस के बाद होता है। – mob