मैं एमएस एक्सेस वीबीए में एक सरणी को rediminsion करने का प्रयास कर रहा हूँ। ऐसा करने का सबसे प्रभावी तरीका क्या है?आप वीबीए में एक सरणी को कैसे कम करते हैं?
उत्तर
कैसा रहेगा ...
यह myArray
Redim Preserve MyArray(15)
में पहले से ही डेटा को सुरक्षित रखेगा यह myArray
Redim MyArray(15)
सबसे कुशल तरह से करने के लिए मौजूदा किसी भी पिछले डेटा मिटा देगा सरणीकरण एक सरणी है कि आप उस सरणी का आकार बदलने की संख्या को सीमित कर सकते हैं। हर बार जब आप सरणी का आकार बदलते हैं तो वीबी पूरी सरणी ले लेगा और इसे कॉपी करेगा, समय और स्मृति बर्बाद कर देगा।
यदि आप विकास समय पर अपने सरणी के आकार को नहीं जानते हैं तो आपको सरणी के अधिकतम आकार में सबसे अच्छा अनुमान लगाना चाहिए, फिर सरणी भरें। एक बार सरणी भरने के बाद आप इसे सही आकार में बदल सकते हैं।
लूप में अंतरिक्ष से बाहर निकलने के बाद वर्तमान सरणी के आकार को दोगुना करके यह अनुमान लगाने के लिए सबसे अच्छा होता है। आप RedimTestA()
के साथ नीचे की कार्रवाई में इसे प्रत्येक पुनरावृत्ति (1,000,000 बार) और RedimTestB()
सरणी का आकार बदलकर कभी-कभी इसका आकार बदल सकते हैं (22 बार)।
मेरे लैपटॉप पर RedimTestA()
लेता है 3.93 सेकंड और RedimTestB()
0.41 सेकंड लेता है।
Option Explicit
Sub RedimTest()
Dim tA, tB As Single
tA = RedimTestA(1000000)
tB = RedimTestB(1000000)
MsgBox "Test A takes : " & tA & ", and Test B takes : " & tB
End Sub
Function RedimTestA(iterations As Long) As Single
Dim t As Single
Dim i As Long
Dim aryString() As String
Dim myString As String
t = Timer
Do While i <= iterations
ReDim Preserve aryString(i) As String
aryString(i) = "ABCEFG123"
i = i + 1
Loop
RedimTestA = Timer - t
End Function
Function RedimTestB(iterations As Long) As Single
Dim t As Single
Dim i As Long
Dim aryString() As String
Dim myString As String
t = Timer
ReDim aryString(0) As String
Do While i <= iterations
If i >= UBound(aryString) Then
ReDim Preserve aryString(i * 2) As String
End If
aryString(i) = "ABCEFG123"
i = i + 1
Loop
ReDim Preserve aryString(i - 1) As String ' i - 1 becuase of the final i = i + 1
RedimTestB = Timer - t
End Function
यह भी ध्यान रखें कि आप केवल बहु आयामी सरणी के दाएं सबसे अधिक आयाम को फिर से कर सकते हैं।
यह ध्यान में रखना एक महत्वपूर्ण सूक्ष्म नोट है। –
- 1. आप आईफोन पर यूआईपीकर व्यू को कैसे कम करते हैं?
- 2. आप जावा लॉगिंग बॉयलरप्लेट कोड को कैसे कम करते हैं?
- 3. आप वीबीए में लीपियर कैसे ढूंढते हैं?
- 4. मोंगो डीबी में आप एक सरणी में एक एम्बेडेड ऑब्जेक्ट फ़ील्ड को कैसे इंडेक्स करते हैं?
- 5. आप C++ में गतिशील सरणी कैसे प्रारंभ करते हैं?
- 6. आप सी ++ हेडर में सरणी कैसे घोषित करते हैं?
- 7. डेल्फी में लेवेनशेटिन दूरी को आप कैसे कार्यान्वित करते हैं?
- 8. आप कम विलंबता वातावरण में विलंबता को कैसे मापते हैं?
- 9. सी में चरित्र सरणी की एक सरणी पर आप कैसे पुनरावृत्त करते हैं?
- 10. आप MSBuild को शर्तों से कम/उससे कम कैसे उपयोग करते हैं?
- 11. क्लोजर में आप एक सूची को यादृच्छिक कैसे करते हैं?
- 12. आप एक बाइट सरणी को बिटमैप इंस्टेंस (.NET) में कैसे परिवर्तित करते हैं?
- 13. आप एक ऑब्जेक्ट सरणी को किसी गतिविधि में कैसे पास करते हैं?
- 14. आप एक एसोसिएटिव सरणी को dtrace में कैसे प्रिंट करते हैं?
- 15. आप मोंगो में एक सरणी उपखंड को कैसे सीमित करते हैं?
- 16. सी # परियोजनाओं में आप app.config को कैसे एम्बेड करते हैं?
- 17. आप सी में structs की एक सरणी कैसे बनाते हैं?
- 18. आप preg_match कैसे करते हैं जहां पैटर्न एक सरणी है, php में?
- 19. आप एनएसएसटींग को घटक भागों में कैसे विभाजित करते हैं?
- 20. आप सी में संसाधन फ़ाइलों को कैसे एम्बेड करते हैं?
- 21. आप वीबी.नेट में एक नई सरणी कैसे बनाते हैं?
- 22. आप $ _FILES सरणी के माध्यम से कैसे लूप करते हैं?
- 23. फ़ोरैच लूप में आप सरणी तत्व को कैसे हटाते हैं?
- 24. आप ऑब्जेक्ट्स की सरणी कैसे क्रमबद्ध करते हैं?
- 25. आप BSTR को wchar_t [] में कुशलतापूर्वक कॉपी कैसे करते हैं?
- 26. , आप आइटम को कैसे क्रमबद्ध करते हैं?
- 27. आप कैसे FB.Canvas.scrollTo को एनिमेट करते हैं?
- 28. आप XamlParseException को कैसे डिबग करते हैं?
- 29. आप wx.Panel को रीफ्रेश कैसे करते हैं?
- 30. आप JVM को कैसे क्रैश करते हैं?
ओह, चलो - जब तक आप पुनरावृत्ति के 1000s के साथ एक लूप में रीडिमिंग नहीं कर रहे हैं, यह वास्तव में एक यथार्थवादी समस्या नहीं होगी। मेरे पास बहुत सारे कोड हैं जो हर समय ReDims arrays और न तो प्रदर्शन और न ही स्मृति समस्याएं हैं। दूसरी तरफ, मैं मूल्यों के 1000s को संग्रहीत करने के लिए सरणी का उपयोग नहीं करता (यही वह टेबल और रिकॉर्डसेट है)। –
पूरी तरह से @ डेविड से सहमत हैं। यह रन टाइम पर अधिक कुशल है, लेकिन क्या मैं इसका इस्तेमाल करूंगा? शायद ही कभी, अगर मैं कुछ प्रकार के जादू सरणी हैंडलिंग कक्षा लिख रहा था। –
निहित प्रश्न का उत्तर यदि अक्सर रिकॉर्डकार्ट कर्सर प्रकार का उपयोग करने के लिए रिकॉर्डकाउंट गुण का उपयोग करता है (यानी पंक्तियों की संख्या लौटाई जाती है) ताकि आप एक हिट में सरणी को आयाम कर सकें। यदि रिकॉर्डसेट एडीओ है, तो आप रीडिम के साथ शामिल किए बिना सामग्री की सरणी वापस करने के लिए अपनी GetRows विधि का उपयोग कर सकते हैं :) – onedaywhen