क्लासिक एएसपी वीबीस्क्रिप्ट में किसी सरणी के माध्यम से पुनरावृत्ति करने का सबसे अच्छा तरीका क्या है?
For i = LBound(arr) To UBound(arr)
LBound
का उपयोग कर पूछ में बात क्या है नीचे दिए गए कोड में? निश्चित रूप से यह हमेशा 0
क्लासिक एएसपी वीबीस्क्रिप्ट में किसी सरणी के माध्यम से पुनरावृत्ति करने का सबसे अच्छा तरीका क्या है?
For i = LBound(arr) To UBound(arr)
LBound
का उपयोग कर पूछ में बात क्या है नीचे दिए गए कोड में? निश्चित रूप से यह हमेशा 0
क्यों For Each
का उपयोग नहीं करें? इस तरह आपको देखभाल करने की आवश्यकता नहीं है कि LBound
और UBound
क्या हैं।
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
शायद यह वीबी 6 से आता है। VB6 में Option Base बयान के साथ है, इसलिए आपको इस तरह सरणियों के लोअर बाउंड को बदल सकते हैं:
Option Base 1
इसके अलावा
VB6 में, आप कम इस तरह की एक विशिष्ट सरणी के लिए बाध्य कर सकते हैं बदल:
Dim myArray(4 To 42) As String
मैं हमेशा प्रत्येक के लिए उपयोग किया है ...
करने के लिए एक अच्छा कारण नहीं उपयोग For i = LBound(arr) To UBound(arr)
dim arr(10)
सरणी के ग्यारह सदस्यों, 0 आवंटित 10 के माध्यम से (यह मानते हुए भी नहीं है वीबी 6 डिफ़ॉल्ट विकल्प बेस)।
कई वीबी 6 प्रोग्रामर मानते हैं कि सरणी एक-आधारित है, और आवंटित arr(0)
का उपयोग कभी नहीं करें। हम For i = 1 To UBound(arr)
या For i = 0 To UBound(arr)
का उपयोग करके बग का संभावित स्रोत निकाल सकते हैं, क्योंकि तब यह स्पष्ट है कि arr(0)
का उपयोग किया जा रहा है या नहीं।
For each
पॉइंटर के बजाए प्रत्येक सरणी तत्व की एक प्रति बनाता है।
इसमें दो समस्याएं हैं।
जब हम किसी सरणी तत्व को मान निर्दिष्ट करने का प्रयास करते हैं, तो यह मूल पर प्रतिबिंबित नहीं होता है। यह कोड वैरिएबल i
पर 47 का मान निर्दिष्ट करता है, लेकिन arr
के तत्वों को प्रभावित नहीं करता है।
arr = Array(3,4,8) for each i in arr i = 47 next i Response.Write arr(0) '- returns 3, not 47
हम एक for each
में एक सरणी तत्व के सूचकांक पता नहीं है, और हम तत्वों के क्रम की गारंटी नहीं है (हालांकि यह क्रम में हो रहा है।)
LBound
हमेशा 0
हालांकि एक ऐसा सरणी बनाना संभव नहीं है जिसमें वीबीस्क्रिप्ट में 0 से कम बाध्य है, फिर भी एक COM compon से भिन्न प्रकारों को पुनर्प्राप्त करना संभव है एंट जो एक अलग LBound
निर्दिष्ट किया हो सकता है।
ने कहा कि मैंने कभी ऐसा नहीं किया है जिसने ऐसा कुछ किया है।
आप सरणी कक्षों को सीधे संपादित करने के लिए 'प्रत्येक के लिए' का उपयोग नहीं कर सकते हैं, क्योंकि आपके उदाहरण में 'y' सरणी कक्ष की एक प्रति है, न कि संदर्भ है। सरणी संपादन के लिए, 'i = LBound (arr) के लिए UBound (arr)' को 'arr (i)' का उपयोग करके सेल को सीधे संदर्भित करने और सेल सामग्री को संपादित करने की अनुमति होगी (जैसे 'arr (i) = trim (arr (i)) ')। –