2010-05-19 17 views
8

क्यों नहीं स्पष्ट सभी सरणी सूची डेटा नीचे कोड?सभी साफ़ सरणी सूची डेटा

 Console.WriteLine("Before cleaning:" + Convert.ToString(ID.Count)); 
     //ID.Count = 20 
     for (int i = 0; i < ID.Count; i++) 
     { 
      ID.RemoveAt(i); 
     } 
     Console.WriteLine("After cleaning:" + Convert.ToString(ID.Count)); 
     //ID.Count = 10 

स्क्रीन पर 10 मुद्रित क्यों हैं?

हो सकता है कि वहाँ एक और विशेष समारोह है, जो सब कुछ को हटा देता है? http://msdn.microsoft.com/en-us/library/system.collections.arraylist.clear.aspx

+0

लूप के माध्यम से पहली बार आप स्थिति 0 पर आइटम को हटा दें।सूची में अब 1 9 आइटम हैं, स्थिति 1 पर आइटम अब शून्य, 2 -> 1, 3-> 2 आदि पर स्थानांतरित हो जाता है। दूसरी बार लूप के माध्यम से आप आइटम को स्थिति 1 पर हटा देते हैं (यह आइटम होता था 2)। आपने आइटम को स्थिति 0 पर छोड़ दिया है (जो आइटम 1 होता था)। इस तरह आप सूची से हर दूसरे आइटम को हटा रहे हैं। –

उत्तर

6
`Array.Clear()` 

सरणी में सभी आइटम हटा देता है।

`Array.RemoveAt(i)` 

सरणी में ith अनुक्रमणिका के तत्व को हटा देता है।

6
ArrayList.Clear Method 
Removes all elements from the ArrayList. 
और अधिक विस्तार के लिए

भी बदलता है। इसलिए जब आप ID.RemoveAt(0); कहते हैं तो इंडेक्स 1 पर तत्व अब सूचकांक 0 पर ले जाया जाएगा। तो फिर आपको उसी तत्व को निकालना होगा (जैसे डेक्यूइंग)। जब तक आप अंतिम तत्व तक नहीं पहुंच जाते। हालांकि यदि आप एक ही समय में सभी तत्वों को हटाना चाहते हैं तो आप साफ़() विधि का बेहतर उपयोग कर सकते हैं।

2

उपयोग स्पष्ट() विधि

या

परिवर्तन ID.RemoveAt(i);ID.RemoveAt(0);

को जब भी एक तत्व संग्रह से निकाल दिया जाता है, इसकी सूचकांक:

2

10 आइटम, ID.Count() == 10 और i == 10 तो पाश बंद हो जाता है को हटाने के बाद।

उपयोग ID.Clear() सरणी सूची में सभी आइटम हटाने के लिए।

11

आप केवल वास्तव में RemoveAt 10 बार कॉल कर रहे हैं। जब i 10 तक पहुंचता है, ID.Count 10 भी होगा। आप करके इसे ठीक कर सकते हैं:

int count = ID.Count; 
for (int i = 0; i < originalCount; i++) 
{ 
    ID.RemoveAt(0); 
} 

यह एक O (n) आपरेशन हालांकि है सूची की शुरुआत से एक प्रविष्टि को हटाने शामिल है और सब कुछ को कॉपी के रूप में।

अधिक कुशलता से (ओ (एन)):

int count = ID.Count; 
for (int i = 0; i < originalCount; i++) 
{ 
    ID.RemoveAt(ID.Count - 1); 
} 

या समकक्ष लेकिन सरल:

while (ID.Count > 0) 
{ 
    ID.RemoveAt(ID.Count - 1); 
} 

लेकिन ID.Clear() का उपयोग कर शायद इन सब से अधिक कुशल है, भले ही यह भी है हे (एन)।

1

आपका कोड है:

अपने विधि
ID.RemoveAt(0); 
... 
ID.RemoveAt(9); 
ID.RemoveAt(10); \\ at this point you have already removed 10 
       \\ items so there is nothing left on 10- 19, but you are left with 
       \\ the 'first' 10 elements 
... 
ID.RemoveAt(19); 

सामान्यतया सूची से हर दूसरे तत्व को हटा ..

उपयोग ArrayList.Clear बजाय के रूप में अन्य उल्लेख किया है।

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