2012-05-14 13 views

उत्तर

8

पुरानी मानों को संरक्षित करने के साथ सरणी के आकार को बढ़ाने के लिए संरक्षित के साथ रीडिम का उपयोग करें।

लूप में रीडीम सलाह दी जाती है जब आपको आकार के बारे में कोई जानकारी नहीं होती है और ऐरे आकार को एक-एक करके बढ़ाने के बारे में पता चला है।

Dim TeamIndex(), i As Integer 

For i = 0 to 100 
    ReDim Preserve TeamIndex(i) 
    TeamIndex(i) = <some value> 
Next 

आप शॉट में कोड में बाद में सरणी के आकार की घोषणा करने के तो

ReDim TeamIndex(100) 

का उपयोग तो कोड होगा:

Dim TeamIndex(), i As Integer 
ReDim TeamIndex(100) 
For i = 0 to 100 
    TeamIndex(i) = <some value> 
Next 

आप ArrayList/सूची का उपयोग कर सकते हैं (टी का) मूल्यों को अधिक गतिशील रूप से जोड़ें/निकालें का उपयोग करने के लिए।

Sub Main() 
    ' Create an ArrayList and add three strings to it. 
    Dim list As New ArrayList 
    list.Add("Dot") 
    list.Add("Net") 
    list.Add("Perls") 
    ' Remove a string. 
    list.RemoveAt(1) 
    ' Insert a string. 
    list.Insert(0, "Carrot") 
    ' Remove a range. 
    list.RemoveRange(0, 2) 
    ' Display. 
    Dim str As String 
    For Each str In list 
     Console.WriteLine(str) 
    Next 
    End Sub 

List(Of T) MSDN

List(Of T) DotNetperls

+0

रीडीम और संरक्षित करने की कोई आवश्यकता नहीं है। बस आकार 100 के साथ सरणी को initilize [मानते आकार 100 है] – Writwick

+0

'i = 0 के लिए कुछ नहीं '। तो यदि इस मामले में 'कुछ पूर्णांक' के रूप में 'नए पूर्णांक (कुछ नहीं)', 'रीडीम' और 'संरक्षित' की आवश्यकता नहीं होगी [पूछताछकर्ता द्वारा उदाहरण] 'कुछ नहीं' स्थिर है। तदनुसार, यदि 'कुछ नहीं' भी परिवर्तनीय है और लगातार बदल जाता है तो 'रीडीम' और 'संरक्षित' आवश्यक होगा! – Writwick

+1

+1 लेकिन सूची (टी का) को नए कोड के लिए ArrayList पर प्राथमिकता दी जानी चाहिए – MarkJ

2

Romil के जवाब में कुछ भी नहीं है कि मैं गलत होने का विचार नहीं है, लेकिन मैं आगे जाना होगा। ReDim Preserve एक बहुत ही उपयोगी कमांड है लेकिन यह जानना महत्वपूर्ण है कि यह एक महंगा आदेश है और इसे बुद्धिमानी से उपयोग करना है।

पर विचार करें:

Dim TeamIndex(), i As Integer 
For i = 0 to 100 
    ReDim Preserve TeamIndex(i) 
    TeamIndex(i) = <some value> 
Next 

हर पाश के लिए, को छोड़कर मैं = 0, सामान्य भाषा रनटाइम (CLR) करना होगा: एक नया पूर्णांक सरणी कि एक तत्व से बड़ा है के लिए

  • खोज अंतरिक्ष पिछले सरणी
  • पिछले सरणी से भर मूल्यों कॉपी
  • नए तत्व आरंभ
  • कचरा संग्रह के लिए पिछली सरणी जारी करें।

ArrayList शानदार है यदि आपको सरणी के बीच से तत्व जोड़ने या निकालने की आवश्यकता है, लेकिन यदि आप इसकी आवश्यकता नहीं है तो भी आप उस कार्यक्षमता के लिए भुगतान कर रहे हैं। यदि, उदाहरण के लिए, आप एक फ़ाइल से मूल्य पढ़ रहे हैं और अनुक्रमिक रूप से उन्हें संग्रहीत कर रहे हैं लेकिन पहले से नहीं जानते कि कितने मूल्य होंगे, ArrayList में भारी ओवरहेड होता है जिसे आप टालना कर सकते हैं।

मैं हमेशा इस तरह ReDim का उपयोग करें:

Dim MyArray() As XXX 
Dim InxMACrntMax As Integer 

ReDim MyArray(1000) 
InxMACrntMax=-1 

Do While more data to add to MyArray 

    InxMACrntMax = InxMACrntMax + 1 
    If InxMACrntMax > UBound(MyArray) Then 
    ReDim Preserve MyArray(UBound(MyArray)+100) 
    End If 
    MyArray(InxMACrntMax) = NewValue 

Loop     

ReDim MyArray(InxMACrntMax) ' Discard excess elements 

से ऊपर मैं 100 और 1000 के मूल्यों मैं लेने निर्भर का इस्तेमाल किया है की संभावना आवश्यकता के अपने आकलन पर।

संबंधित मुद्दे