2008-08-05 22 views
30

क्लासिक एएसपी वीबीस्क्रिप्ट में किसी सरणी के माध्यम से पुनरावृत्ति करने का सबसे अच्छा तरीका क्या है?

For i = LBound(arr) To UBound(arr) 

LBound का उपयोग कर पूछ में बात क्या है नीचे दिए गए कोड में? निश्चित रूप से यह हमेशा 0

उत्तर

45

क्यों For Each का उपयोग नहीं करें? इस तरह आपको देखभाल करने की आवश्यकता नहीं है कि LBound और UBound क्या हैं।

Dim x, y, z 
x = Array(1, 2, 3) 

For Each y In x 
    z = DoSomethingWith(y) 
Next 
+7

आप सरणी कक्षों को सीधे संपादित करने के लिए 'प्रत्येक के लिए' का उपयोग नहीं कर सकते हैं, क्योंकि आपके उदाहरण में 'y' सरणी कक्ष की एक प्रति है, न कि संदर्भ है। सरणी संपादन के लिए, 'i = LBound (arr) के लिए UBound (arr)' को 'arr (i)' का उपयोग करके सेल को सीधे संदर्भित करने और सेल सामग्री को संपादित करने की अनुमति होगी (जैसे 'arr (i) = trim (arr (i)) ')। –

1

शायद यह वीबी 6 से आता है। VB6 में Option Base बयान के साथ है, इसलिए आपको इस तरह सरणियों के लोअर बाउंड को बदल सकते हैं:

Option Base 1 
इसके अलावा

VB6 में, आप कम इस तरह की एक विशिष्ट सरणी के लिए बाध्य कर सकते हैं बदल:

Dim myArray(4 To 42) As String 
1

मैं हमेशा प्रत्येक के लिए उपयोग किया है ...

16

करने के लिए एक अच्छा कारण नहीं उपयोग 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 पॉइंटर के बजाए प्रत्येक सरणी तत्व की एक प्रति बनाता है।

इसमें दो समस्याएं हैं।

  1. जब हम किसी सरणी तत्व को मान निर्दिष्ट करने का प्रयास करते हैं, तो यह मूल पर प्रतिबिंबित नहीं होता है। यह कोड वैरिएबल 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

  2. हम एक for each में एक सरणी तत्व के सूचकांक पता नहीं है, और हम तत्वों के क्रम की गारंटी नहीं है (हालांकि यह क्रम में हो रहा है।)

3

LBound हमेशा 0

हालांकि एक ऐसा सरणी बनाना संभव नहीं है जिसमें वीबीस्क्रिप्ट में 0 से कम बाध्य है, फिर भी एक COM compon से भिन्न प्रकारों को पुनर्प्राप्त करना संभव है एंट जो एक अलग LBound निर्दिष्ट किया हो सकता है।

ने कहा कि मैंने कभी ऐसा नहीं किया है जिसने ऐसा कुछ किया है।