.Net में सरणियों की लंबाई क्यों होती है लेकिन अन्य संग्रह प्रकारों की गणना होती है? [बन्द है]


23

उदाहरण के लिए C # में, सरणियों की लंबाई संपत्ति है। लेकिन अन्य संग्रह प्रकार जैसे सूचियां, आदि की गणना संपत्ति है। क्या इन दोनों के अलग होने का एक कारण है? अगर ऐसा है तो मैं जानना चाहूंगा।


4
मुझे अपना लिप्चर-सीटी नहीं मिल रहा है, इसलिए मुझे नहीं लगता कि हमें आज कोई अच्छा जवाब मिलेगा :(
MetaFight

4
बस एक जंगली अनुमान, जैसा कि मुझे इस बारे में कोई जानकारी नहीं है कि सीएलआर कैसे डिजाइन किया गया था: संग्रह प्रकारों से पहले कैसे सरणियाँ काम करती हैं, इसका विवरण। संपत्ति की लंबाई को बुलाना इसके लिए सबसे स्वाभाविक नाम है, और जैसा कि इसके अनुरूप करने के लिए एक अजीब मानक नहीं था, इसलिए यह वही है जो सरणियों के डिजाइनर ने उपयोग करने के लिए चुना है। तब संग्रह बाद में निर्दिष्ट किए गए थे, लेकिन लंबाई कुछ संग्रह के लिए उपयुक्त नहीं है (इसका अर्थ है रैखिकता, इसलिए अनधिकृत संग्रह के लिए यह एक उचित नाम नहीं है) इसलिए गणना को अधिक तार्किक रूप से सुसंगत चुना गया था।
जूल्स

4
मुझे लगता है कि इस पूर्व स्टैकओवरफ़्लो पोस्ट का सही उत्तर है।
डॉक ब्राउन

6
@ मीताफाइट: मैंने हाल ही में शैक्षिक वीडियो की एक श्रृंखला दर्ज की है और एक बिंदु पर मैंने उल्लेख किया है कि मुझे नहीं पता कि डिजाइनरों ने लंबाई और गिनती दोनों का उपयोग क्यों किया। इसने मुझे हमेशा विचित्र के रूप में मारा है। ऊपर जूल्स की टिप्पणी प्रशंसनीय लगती है।
एरिक लिपर्ट

3
मेटा नोट - मैंने 5 वां VTC डाला है क्योंकि मुझे विश्वास नहीं है कि इस प्रश्न का उत्तर निश्चित रूप से दिया जा सकता है। मौजूदा जवाब एक ठोस और प्रशंसनीय जवाब है, लेकिन यह सबूत के साथ समर्थित नहीं है। इसी तरह, लिपर्ट की टिप्पणी मुझे यह सोचने के लिए प्रेरित करती है कि कोई भी इसका जवाब नहीं जानता है क्योंकि यह एक सचेत निर्णय के विपरीत एक निरीक्षण के कारण हो सकता है।

जवाबों:


30

उन्हें अलग नाम दिया गया है क्योंकि शब्दार्थ वे काफी अलग हैं:

एक संग्रह की गणना वर्तमान में इसमें संग्रहीत वस्तुओं की संख्या है और समय के साथ संभावित रूप से बदल सकती है।

एक सरणी की लंबाई अधिकतम आइटम है जो इसे पकड़ सकती है (इसमें 10 की लंबाई होगी, भले ही आपने इसमें कई आइटम संग्रहीत नहीं किए हों) और अपरिवर्तनीय है।

उदाहरण:

अगर मेरे पास एक बाल्टी है जो उसमें अधिकतम 100 गेंदों को फिट कर सकती है, तो इसकी लंबाई 100 है। अगर मैं इसमें 50 गेंद डालूं तो इसकी गिनती 50 है।

अगर मैं 10 और गेंद जोड़ दूं तो गिनती 60 हो जाती है लेकिन लंबाई अभी भी 100 है। लंबाई बदलने के लिए मुझे एक अलग बाल्टी लेने की जरूरत है।

ऐरे शायद लंबाई शब्द का उपयोग करते हैं क्योंकि हुड के तहत यह आइटम के आकार से गुणा की गई क्षमता के आधार पर एक सन्निहित ब्लॉक (लंबाई) को आवंटित कर रहा है। हालांकि यह तथ्य कि सूची वर्ग "क्षमता" का उपयोग एक समान (हालांकि परस्पर करने योग्य) अवधारणा के लिए करता है, यह दर्शाता है कि सरणी ऐतिहासिक कारणों से "लंबाई" शब्द का उपयोग कर सकती है।


12
T[]N की लंबाई के साथ A हमेशा प्रकार के N मान को संग्रहीत करता है T। शब्दार्थ, उन सभी मूल्यों को सार्थक नहीं किया जा सकता है (वे nullउदाहरण के लिए हो सकते हैं ), लेकिन वे मौजूद हैं। यह क्षमता के सामान्य अर्थ से अलग है ( List<T>उदाहरण के लिए उपयोग किया जाता है )। आप सही हैं जो Countबदल सकते हैं जबकि Lengthनहीं कर सकते। फिर, कुछ भी अनिवार्य नहीं Countहै, वास्तव में, परिवर्तन। इसका उपयोग अपरिवर्तनीय संग्रह के लिए भी किया जाता है।

@delnan ओह प्रिय। एहसास नहीं था कि क्षमता शब्द पहले ही इस तरह से C # में इस्तेमाल किया गया था। मैंने गलती से इसे ओवरलोड कर दिया है। इस पर ध्यान दिलाने के लिए धन्यवाद। मैं अपना उत्तर स्पष्ट करने के लिए अपडेट करूंगा।
कॉम्बिनेटरिक्स

क्षमता और लंबाई के बीच अंतर है - क्षमता वस्तु के जीवन-चक्र पर बदल सकती है, जबकि लंबाई हमेशा एक ही रहती है। यदि मुझे ऑब्जेक्ट पर एक लंबाई की संपत्ति दिखाई देती है, तो मैं मान लूंगा कि यह "हार्ड" अधिकतम संख्या (या बॉर्डर / इंडेक्स) है, जबकि अगर मैं क्षमता संपत्ति देखता हूं, तो मैं मानूंगा कि यह "सॉफ्ट" अधिकतम संख्या है जिसे मुझे केवल जांचना चाहिए के खिलाफ अगर मैं प्रदर्शन से चिंतित हूं।
स्टुपिडोने

@StupidOne: यदि आप उस मार्ग पर जाते हैं, तो किसी भी सरणी में एक count-प्रतिरूपता होनी चाहिए ।
डेडुप्लिकेटर

1
लानत StringBuilder ... कड़े शब्दों में Vigil की तरह भाषा StringBuilder वर्ग को तोड़ने के लिए ठीक से सजा दिया गया होता github.com/munprise/vigil
फाल्को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.