क्या यह तेजी से List<T>.Remove(T)
या List<T>.RemoveAt(int)
विधि .NET संग्रह में है? क्या मूल्य प्रकार या संदर्भ प्रकारों के लिए गति अलग है?क्या यह तेजी से सूची <T> है। निकालें (टी) या सूची <T>। RemoveAt (int) विधि?
उत्तर
सूची। रिमूव (टी) इसके कार्यान्वयन में इंडेक्सऑफ और निकालें (int) का उपयोग करता है। तो List.RemoveAt (int) तेज है।
public bool Remove(T item)
{
int index = this.IndexOf(item);
if (index >= 0)
{
this.RemoveAt(index);
return true;
}
return false;
}
निकालें (टी) आंतरिक रूप से RemoveAt (int) इतना को फोन करेगा, सीधे कर एक RemoveAt तेज है।
लेकिन आप क्या हासिल करना चाहते हैं?
सरल जवाब:
सामान्य तौर पर, RemoveAt
, तेज है, हालांकि हमेशा नहीं बेहद।
लांग जवाब:
की सिर्फ पहली उचित आइटम खोजने पर विचार करें। Remove
विधि को उस वस्तु के लिए सूची खोजनी है जो दिए गए ऑब्जेक्ट से मेल खाती है, और इस प्रकार O(n)
सामान्य रूप से समय है। एक सूची में RemoveAt
बस दिए गए आइटम को सूचीबद्ध कर सकता है, और इस प्रकार O(1)
है।
अब, सूची के अंत से किसी आइटम को हटाने के लिए हमेशा O(1)
है, लेकिन सामान्य रूप से किसी आइटम को हटाने से O(n)
समय लगता है, क्योंकि रीशेफलिंग करने की आवश्यकता होती है (हटाए गए आइटम के बाद आइटम ले जाया जाता है)। इसलिए, सामान्य मामले में, हटाने के लिए कुल समय जटिलता क्रमशः निकालें और निकालें के लिए O(n) + O(n)
या O(n) + O(1)
है, इसलिए किसी भी मामले में बस O(n)
है। हालांकि, RemoveAt
कम से कम जितनी जल्दी हो सके गारंटी है, हालांकि स्केलिंग वही है जब तक कि आपको पता न हो कि आप इसे अंत में/अंत में हटा रहे हैं।
धन्यवाद, अब मैं समझता हूं कि एमएसडीएन क्यों कहता है कि निकालें ए ओ (एन) है जहां एन गणना-सूचकांक है – Yellowfog
उपयोग System.Diagnostics.Stopwatch()
मैं बस जो तेजी से होता है की जाँच करने के एक छोटे से सांत्वना एप्लिकेशन बनाया होगा।
यह देखते हुए कि एक नेट एक वेक्टर (या सरणी) को संक्रमित करता है, एक लिंक्ड सूची नहीं है, RemoveAt() तेज है।
- 1. सूची <T> से सूची में परिवर्तन टी []
- 2. सूची <int> से नकारात्मक मानों को कैसे निकालें?
- 3. सूची <int> सी #
- 4. क्रमबद्ध एक शब्दकोश <int, सूची <int>> कुंजी सूची के अंदर + मूल्यों से
- 5. IList <int> बनाम सूची <int>
- 6. सूची <T> सूची चाहिए। सूची <T> के साथ पहले से हटाएं। विशेषज्ञ?
- 7. सूची <int> सी # 3.5
- 8. सूची <int> परिवर्तित करने के लिए int []
- 9. शब्दकोश है <TKey, TValue> LINQ से एक सूची <T> पर तेजी से?
- 10. एक हैशटेबल कास्ट करें। सूची <int> या अन्य आईनेमेरेबल <int>
- 11. सूची <int> IENumerable <IComparable>
- 12. Convert सूची <int> सीमांकित स्ट्रिंग सूची में
- 13. सूची <String> को शब्दकोश <int,String>
- 14. linq क्वेरी जहां int ID सूची <int>
- 15. टी :: इटरेटर के साथ त्रुटि, जहां टेम्पलेट पैरामीटर टी वेक्टर <int> हो सकता है या <int>
- 16. सूची <T> से कुशलता से कैसे निकालें (सी #)?
- 17. जो डाली तेजी static_cast <int>() या पूर्णांक है()
- 18. सी # सूची <> जोड़ें() विधि प्रदर्शन
- 19. सूची <T> क्यों है IndexOf() सूची <T> से बहुत तेज है।()?
- 20. सूची में int की पंक्ति श्रेणी <int>
- 21. सूची <Object> और सूची <?>
- 22. सूची <T>
- 23. कास्ट सूची <T> सूची में <Interface>
- 24. सूची <T>
- 25. सूची से SqlBulkCopy <>
- 26. सूची <object>
- 27. सूची <X> से सूची <Y> पर सूची के लिए छोटा वाक्यविन्यास?
- 28. सी # शब्दकोश के लिए फ्लैट सूची <T> विस्तृत <टी, ICollection <int>>
- 29. SqlDataReader प्रदर्शन सूची <string[]> या सूची <object[]>
- 30. सी # सूची <string[]> सूची <object[]> रूपांतरण
लेकिन यदि यह आपके कोड को सबसे खराब या अपठनीय बनाता है, तो रिमोट (टी) का उपयोग जारी रख सकते हैं। –
'this.IndexOf (आइटम) 'कोड के प्रदर्शन के मामले में एक बड़ी कीमत है क्योंकि यह पूरी बैकिंग सरणी स्कैन करता है जब तक कि आइटम को हटाया नहीं जाता है। खासकर जब आइटम को हटाने के लिए सूची के अंत में होता है, तो हर बार हटाए जाने पर अनुरोध पूरी सूची स्कैन करता है। यह मेरे साथ हुआ जब मैं 'सूची' कक्षा की सहायता से एक स्टैक डेटा संरचना को लागू करने की कोशिश कर रहा था। चूंकि सूची का आकार काफी बढ़ता है उदा। 10K तत्वों से परे, निकालें (टी) का उपयोग कर अंत से हटाने से आपके प्रोग्राम के साथ विनाश हो सकता है। –
RBT