@CharlesWilliams जवाब से अधिक संग्रह का प्रयोग करेंगे सही है: किसी सरणी के सभी मानों के माध्यम से लूपिंग एक संग्रह या शब्दकोश को पुनरावृत्ति करने से तेज़ है: इतना है कि, जब मैं ऐसा करने की ज़रूरत होती हूं तो मैं हमेशा एक कुंजीपटल() या आइटम() विधि का उपयोग करता हूं - दोनों विधियां वापस एक वेक्टर सरणी
एक नोट: मैं संग्रह वर्ग का उपयोग करने से कहीं ज्यादा डिक्शनरी कक्षा का उपयोग करता हूं, मौजूदा() विधि बहुत उपयोगी है।
संग्रह या शब्दकोशों में कमी, या पाठ्यक्रम हैं। उनमें से एक यह है कि सरणी 2- या यहां तक कि 3-आयामी हो सकती है - सारणीबद्ध डेटा के लिए एक बेहतर डेटा संरचना। आप संग्रह के सदस्यों के रूप में स्टोर एरे कर सकते हैं, लेकिन इसमें कुछ डाउनसाइड्स हैं: उनमें से एक यह है कि आपको आइटम का संदर्भ नहीं मिल रहा है - जब तक कि आप arrItem = MyDictionary(strKey)
का उपयोग न करें, आपको लगभग निश्चित रूप से 'बायवल' कॉपी मिल जाएगी सरणी; यह खराब है यदि आपका डेटा गतिशील है, और कई प्रक्रियाओं में परिवर्तन के अधीन है। यह भी धीमा है: आवंटन और निर्वासन के बहुत सारे।
सभी पीड़ाओं से मैं काफी विश्वास नहीं VBA स्मृति पुनःआवंटन अगर मैं एक संग्रह या सरणियों के साथ शब्दकोश की क्या ज़रूरत सदस्यों के रूप में (या वस्तुओं!): बाहर के दायरे, नहीं द्वारा Set objCollection = Nothing
पर नहीं, यहां तक कि नहीं objDictionary.RemoveAll द्वारा - यह साबित करना मुश्किल है कि समस्या वीबीई में उपलब्ध सीमित परीक्षण टूलकिट के साथ मौजूद है, लेकिन मैंने उन अनुप्रयोगों में पर्याप्त मेमोरी लीक देखी हैं जो शब्दकोशों में सरणी का उपयोग करते हैं ताकि आपको पता चल सके कि आपको सावधान रहना होगा। ऐसा कहा जा रहा है, मैं कभी भी किसी भी एरस कमांड के बिना सरणी का उपयोग नहीं करता हूं।
@ जेमैक्स ने सरणी के लिए अन्य बड़े प्लस को समझाया है: आप वर्कशीट में एक 'हिट' में एक सरणी बना सकते हैं, और अपने काम को एक 'हिट' में लिख सकते हैं।
आप निश्चित रूप से इंडेक्सेड ऐरे क्लास का निर्माण करके दोनों दुनिया के सर्वश्रेष्ठ प्राप्त कर सकते हैं: संबंधित संग्रह या शब्दकोश ऑब्जेक्ट्स के साथ 2-आयामी सरणी, कुंजी के रूप में किसी प्रकार की पंक्ति पहचानकर्ता को संग्रहित करती है, और पंक्ति ordinals के रूप में डेटा आइटम
स्रोत
2012-05-15 13:01:37
इसके अलावा सरणी संग्रह से बेहतर प्रदर्शन करती हैं (कुंजी लुकअप एक्सेस को छोड़कर जब आप सरणी में सीधे इंडेक्स नहीं कर सकते हैं)। –
@ चार्ल्सविल्लियम्स: टिप – JMax
संग्रह के लिए धन्यवाद एक कुंजी स्टोर करने की ज़रूरत नहीं है, यह वैकल्पिक है। संग्रह किसी भी मूल्य को स्टोर कर सकते हैं, केवल कुंजी (यदि आप उनका उपयोग करते हैं) अद्वितीय होना चाहिए। – Cutter