2010-07-09 11 views

उत्तर

15

सूची। रिमूव (टी) इसके कार्यान्वयन में इंडेक्सऑफ और निकालें (int) का उपयोग करता है। तो List.RemoveAt (int) तेज है।

public bool Remove(T item) 
{ 
    int index = this.IndexOf(item); 
    if (index >= 0) 
    { 
     this.RemoveAt(index); 
     return true; 
    } 
    return false; 
} 
+0

लेकिन यदि यह आपके कोड को सबसे खराब या अपठनीय बनाता है, तो रिमोट (टी) का उपयोग जारी रख सकते हैं। –

+0

'this.IndexOf (आइटम) 'कोड के प्रदर्शन के मामले में एक बड़ी कीमत है क्योंकि यह पूरी बैकिंग सरणी स्कैन करता है जब तक कि आइटम को हटाया नहीं जाता है। खासकर जब आइटम को हटाने के लिए सूची के अंत में होता है, तो हर बार हटाए जाने पर अनुरोध पूरी सूची स्कैन करता है। यह मेरे साथ हुआ जब मैं 'सूची ' कक्षा की सहायता से एक स्टैक डेटा संरचना को लागू करने की कोशिश कर रहा था। चूंकि सूची का आकार काफी बढ़ता है उदा। 10K तत्वों से परे, निकालें (टी) का उपयोग कर अंत से हटाने से आपके प्रोग्राम के साथ विनाश हो सकता है। – RBT

0

निकालें (टी) आंतरिक रूप से RemoveAt (int) इतना को फोन करेगा, सीधे कर एक RemoveAt तेज है।

लेकिन आप क्या हासिल करना चाहते हैं?

19

सरल जवाब:

सामान्य तौर पर, RemoveAt, तेज है, हालांकि हमेशा नहीं बेहद।

लांग जवाब:

की सिर्फ पहली उचित आइटम खोजने पर विचार करें। Remove विधि को उस वस्तु के लिए सूची खोजनी है जो दिए गए ऑब्जेक्ट से मेल खाती है, और इस प्रकार O(n) सामान्य रूप से समय है। एक सूची में RemoveAt बस दिए गए आइटम को सूचीबद्ध कर सकता है, और इस प्रकार O(1) है।

अब, सूची के अंत से किसी आइटम को हटाने के लिए हमेशा O(1) है, लेकिन सामान्य रूप से किसी आइटम को हटाने से O(n) समय लगता है, क्योंकि रीशेफलिंग करने की आवश्यकता होती है (हटाए गए आइटम के बाद आइटम ले जाया जाता है)। इसलिए, सामान्य मामले में, हटाने के लिए कुल समय जटिलता क्रमशः निकालें और निकालें के लिए O(n) + O(n) या O(n) + O(1) है, इसलिए किसी भी मामले में बस O(n) है। हालांकि, RemoveAt कम से कम जितनी जल्दी हो सके गारंटी है, हालांकि स्केलिंग वही है जब तक कि आपको पता न हो कि आप इसे अंत में/अंत में हटा रहे हैं।

+0

धन्यवाद, अब मैं समझता हूं कि एमएसडीएन क्यों कहता है कि निकालें ए ओ (एन) है जहां एन गणना-सूचकांक है – Yellowfog

0

उपयोग System.Diagnostics.Stopwatch()

मैं बस जो तेजी से होता है की जाँच करने के एक छोटे से सांत्वना एप्लिकेशन बनाया होगा।

0

यह देखते हुए कि एक नेट एक वेक्टर (या सरणी) को संक्रमित करता है, एक लिंक्ड सूची नहीं है, RemoveAt() तेज है।

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