.NET लिस्ट <T> कॉनराट बनाम AddRange


94

बीच क्या अंतर है AddRange और Concat एक सामान्य सूची कार्यों? क्या एक दूसरे पर सिफारिश की जाती है?

जवाबों:


122

उनके पास बिल्कुल अलग शब्दार्थ है।

AddRange इसमें अन्य आइटम जोड़कर सूची को संशोधित करता है।

कॉनैट सूची को संशोधित किए बिना सूची और अन्य मदों से युक्त एक नया अनुक्रम लौटाता है।

जो भी आप चाहते हैं शब्दार्थ चुनें।


1
तो आयन एक तंग लूप है, यह बहुत बेहतर होगा कि सभी आंतरिक न्यूिंग और जीसी को तेज़ करने के कारण प्रदर्शन रेंज का उपयोग न करें?
जॉन्क

43
दरअसल, आस्थगित निष्पादन के कारण, Concat का उपयोग करना तेजी से संभव होगा क्योंकि यह ऑब्जेक्ट आवंटन से बचा जाता है - Concat कुछ भी कॉपी नहीं करता है, यह सिर्फ सूचियों के बीच लिंक बनाता है इसलिए जब एन्यूमरेट कर रहा होता है और आप एक के अंत तक पहुंच जाते हैं तो यह पारदर्शी रूप से आपको शुरू में ले जाता है अगले का!
ग्रेग बीच

36

बड़ा अंतर यह है कि AddRange उस सूची को उत्परिवर्तित करता है, जिसके खिलाफ इसे कहा जाता है जबकि कॉनसैट एक नई सूची बनाता है। इसलिए उनके अलग-अलग उपयोग हैं।

कॉनकैट भी एक विस्तार विधि है जो किसी भी IEnumerable पर लागू होती है और एक IEnumerable देता है। आपको एक नई सूची में परिणाम के लिए .ToList () की आवश्यकता होती है।

यदि आप मौजूदा सूची की सामग्री का विस्तार करना चाहते हैं तो AddRange का उपयोग करें।

यदि आप दो IEnumerable स्रोतों से एक नई सूची बना रहे हैं, तो .TList के साथ Concat का उपयोग करें। इसका यह गुण है कि यह किसी भी स्रोत को परिवर्तित नहीं करता है।

यदि आपको कभी भी दो सूचियों (या किसी अन्य IEnumerable) की सामग्री की गणना करने की आवश्यकता होती है, तो बस हर बार कॉनसैट का उपयोग करें, इसका लाभ यह है कि वास्तव में एकीकृत सूची रखने के लिए नई मेमोरी को आवंटित नहीं करना है।


3
+1, वास्तव में, यदि आप 'tolist' को भूल जाते हैं, तो concat चुपचाप कुछ नहीं करता है
smirkingman

7

मुझे यह दिलचस्प लेख इन 2 संरचनाओं के बीच अंतर और उनके प्रदर्शन की तुलना के बारे में बात करते हुए मिला ...

मुख्य विचार यह है कि AddRange बहुत तेज़ है जब इसके बड़े आकार के संग्रह के बारे में।

यहाँ लिंक है

उम्मीद है की यह मदद करेगा,


1
मैं एक परीक्षण की तुलना किया है Concatऔर AddRangeएक साथ List<KeyValuePair<string, string>>1000 तत्वों, concatenated / जोड़ा 100 बार, और साथ AddRangeअत्यंत तेजी से किया गया था। परिणाम ये थे: AddRange13 एमएस, Concat().ToList()16,000 एमएस, और अंत में केवल Concatएक IEnumerableकर ToListपर: 2,700 एमएस।
एंड्रयू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.