VB.NET

2011-10-14 11 views
7
में एक 2 डी सरणी पर प्रत्येक पाश के लिए

मैं एक 2 डी पाश की पहली सरणी के माध्यम से जाने के लिए एक पाश लिख रहा हूँ, और मैं इस समय इस तरह यह है:VB.NET

For Each Dir_path In MasterIndex(, 0) 
    'do some stuff here 
Next 

लेकिन यह मुझे दे रही है एक त्रुटि, कह रही है कि यह पहले क्षेत्र में एक अभिव्यक्ति की अपेक्षा करता है। लेकिन यही वह है जो मैं करने की कोशिश कर रहा हूं, पहले क्षेत्र के माध्यम से लूप। मैं यह कैसे तय करुं? मैं वहां क्या रखूंगा?

संपादित करें: स्पष्ट करने के लिए, मैं विशेष रूप से प्रत्येक सरणी के subarray में 0 तत्व की तलाश में हूँ, इसलिए कि दूसरे क्षेत्र लगातार 0.

+0

मैं अपने अधिक विस्तृत अनुरोध – JoshHetland

उत्तर

14

आप छोरों के लिए नेस्टेड साथ ऐसा कर सकते हैं

नोट: जब प्रत्येक पाश के लिए एक का उपयोग कर एक सरणी में तत्वों से अधिक पुनरावृति करने के लिए, प्रत्येक यात्रा पर उत्पन्न प्लेसहोल्डर वास्तविक सरणी में मूल्य की एक प्रति है। उस मान में परिवर्तन मूल सरणी में दिखाई नहीं देंगे। यदि आप जानकारी को पढ़ने के अलावा कुछ और करना चाहते हैं तो आपको सरणी तत्वों को सीधे संबोधित करने के लिए फॉर लूप का उपयोग करने की आवश्यकता होगी।

दो आयाम सरणी मानते हुए निम्नलिखित कोड उदाहरण प्रत्येक आयाम में प्रत्येक तत्व को मान निर्दिष्ट करेगा।

Dim MasterIndex(5, 2) As String 

For iOuter As Integer = MasterIndex.GetLowerBound(0) To MasterIndex.GetUpperBound(0) 
    'iOuter represents the first dimension 
    For iInner As Integer = MasterIndex.GetLowerBound(1) To MasterIndex.GetUpperBound(1) 
    'iInner represents the second dimension 
    MasterIndex(iOuter, iInner) = "This Isn't Nothing" 'Set the value 
    Next 'iInner 

    'If you are only interested in the first element you don't need the inner loop 
    MasterIndex(iOuter, 0) = "This is the first element in the second dimension" 
Next 'iOuter 
'MasterIndex is now filled completely 

आप वैकल्पिक रूप से गतिशील रूप से प्रत्येक आयाम

से अधिक तेज़ी से दोहराने में .Rank संपत्ति इस्तेमाल कर सकते हैं आप कोनराड रूडोल्फ की तरह एक दांतेदार सरणी पर पाश का सुझाव दे रहा था (यह कार्यात्मक और अधिक बारीकी से अधिक शिथिल अन्य में सरणी कार्यान्वयन से मेल खाता है चाहते हैं PHP जैसे टाइप भाषाओं) तुम इतनी तरह इसके बारे में जा सकते हैं:

'This is a jagged array (array of arrays) populated with three arrays each with three elements 
Dim JaggedIndex()() As String = { 
    New String() {"1", "2", "3"}, 
    New String() {"1", "2", "3"}, 
    New String() {"1", "2", "3"} 
} 

For Each aOuter As String() In JaggedIndex 
    'If you are only interested in the first element you don't need the inner for each loop 
    Dim sDesiredValue As String = aOuter(0) 'This is the first element in the inner array (second dimension) 

    For Each sElement As String In aOuter 
    Dim sCatch As String = sElement 'Assign the value of each element in the inner array to sCatch 
    sElement = "This Won't Stick" 'This will only hold value within the context of this loop iteration 
    Next 'sElement 
Next 'aOuter 
'JaggedIndex is still the same as when it was declared 
1

आप बस नहीं कर सकते है। बहु-आयामी सरणी वास्तव में .NET ढांचे के बुनियादी ढांचे में समर्थित नहीं हैं। उन्हें बाद में विचार के रूप में टैग किया गया प्रतीत होता है। सबसे अच्छा समाधान अक्सर उनका उपयोग नहीं करना है, और Integer(,) के बजाय अराजकता के अरण - Integer()()) का उपयोग करने के लिए और इसके बिना जंजीर सरणी का उपयोग करना है।

+0

के लिए खाते में करने के लिए दोनों उदाहरण अद्यतन इसलिए मैं यह 'MasterIndex() (करने के लिए बदल दिया है)' लेकिन जब मैं फिर से मास्टर इंडेक्स (0) में प्रत्येक Dir_path के लिए 'Master_ndath में प्रत्येक Dir_path' के लिए '' 'के साथ' 'मुझे' इंडेक्स की संख्या अनुक्रमित सरणी के आयामों की संख्या से कम है '? – jayjyli

+1

@Tim वह वाक्यविन्यास बस अमान्य है। मास्टर इंडेक्स में प्रत्येक एक्स के लिए 'DirPath = x (0)' का उपयोग करें और वहां से काम करें ... –