मैं अक्सर इस तरह कोड लिखता हूं: if (list.Count > 0) { }
क्या यह कुशल है?
हां। यह सूची में गिनती को पुनर्प्राप्त करता है, जो सूची के अंदर किसी फ़ील्ड में संग्रहीत होता है, और इसकी तुलना शून्य से करता है।
अब एक सवाल आप से पूछना नहीं किया:
if (sequence.Count() > 0) { }
बारे में क्या? (ध्यान दें Count()
पर कोष्ठकों।)
हम कार्यावधि में अनुक्रम पूछताछ अगर यह एक Count
संपत्ति है कि कुशलता से गणना की जा सकती है कि एक सूची है देखने के लिए। अगर ऐसा होता है, तो हम इसे कहते हैं। यदि नहीं, तो हम एक ही समय में पूरे अनुक्रम को एक आइटम गिनते हैं, और फिर इसकी तुलना शून्य से करें।
क्या यह अविश्वसनीय रूप से अक्षम नहीं है?
हां।
और अधिक कुशल क्या होगा?
if (sequence.Any())
क्यों कि और अधिक कुशल है?
क्योंकि यह एक तत्व से अधिक पुनरावृत्त करने का प्रयास करता है। यदि यह सफल होता है, तो Any
सत्य है; यदि यह विफल रहता है तो Any
गलत है। शून्य से अधिक होने के लिए आपको जार में जेलीबीन की संख्या गिनने की आवश्यकता नहीं है। आपको केवल यह देखने की ज़रूरत है कि कम से कम एक है या नहीं।
काफी अधिक कुशल होने के अतिरिक्त, कोड अब कोड के इच्छित अर्थ की तरह पढ़ता है। यदि आप पूछना चाहते हैं "क्या सूची में कोई आइटम हैं?" फिर पूछें "क्या सूची में कोई आइटम हैं?" और नहीं "शून्य से अधिक सूची में आइटम की संख्या है?"
Capacity
किसी सूची की संपत्ति के बारे में क्या?
यह आपको बताता है कि सूची के आंतरिक डेटा संरचनाओं में कितनी जगह आवंटित की गई है। यह अधिक मात्रा में आवंटित करने से पहले सूची स्टोर की जा सकती है।
स्रोत
2012-04-13 14:44:30
"हम रनटाइम पर अनुक्रम से पूछताछ करते हैं कि यह एक सूची है जिसमें एक गणना संपत्ति है जिसे कुशलता से गणना की जा सकती है।" उससे तुम्हारा क्या मतलब है? क्या आप 'गणना' नामक संपत्ति की जांच करते हैं, या आप जांचते हैं कि 'ICollection' लागू किया गया है या नहीं? दूसरे में मजाकिया विशेष मामले हैं यदि आप 'IENumerable ' के कॉन्वर्स का उपयोग करते हैं। –
CodesInChaos
@CodeInChaos: गणना नाम की संपत्ति के लिए प्रतिबिंब के माध्यम से देखकर धीमा और अविश्वसनीय दोनों होगा। हम इंटरफ़ेस के कार्यान्वयन की तलाश करते हैं। और हां, आप कॉन्वर्सिस मुद्दों के परिणामस्वरूप झूठी नकारात्मकता प्राप्त कर सकते हैं। यदि ऐसा होता है तो यह दर्द होता है तो ऐसा न करें। –
@CodeInChaos यदि 'ICollection 'की जांच विफल हो जाती है, तो कोड गैर-जेनेरिक' आईसीओलेक्शन' के लिए जांचता है। इसलिए अधिकांश ढांचे के संग्रह कोवर्सियन समस्या से सुरक्षित हैं। –
phoog