2011-03-25 9 views
62

ILookup<key, value> इंटरफ़ेस IDictionary<key, value> से भिन्न कैसे है?ILookup इंटरफ़ेस बनाम IDictionary

मुझे समझ में नहीं आता कि ILookup इंटरफ़ेस का क्या अर्थ है।

+6

"मल्टी नक्शा" समर्थन पहली बात यह है कि (एक कुंजी मान का एक सेट करने के लिए मैप कर सकते हैं) मन में आता है है। –

+0

संभावित डुप्लिकेट "[लुकअप का बिंदु क्या है <टीके, टेलीमेंट>?] (Https://stackoverflow.com/q/1403493/107625)"। –

उत्तर

89

ILookup प्रविष्टियों कुंजी प्रति कई मदों को शामिल कर सकते हैं - प्रत्येक कुंजी एक IEnumerable<TElement> को मैप किया है।

के रूप में भी टिप्पणी में करने के लिए संकेत दिया एक ILookup अपरिवर्तनीय, आप एक IDictionary (यह एक Add() विधि और एक इंडेक्सर हो रही अनुमति देता है और सेटिंग मूल्यों को उजागर करता है) में मान अद्यतन कर सकते हैं, जबकि है।

सारांश में उनके उपयोग के मामले में बहुत अलग है - आप एक देखने का उपयोग जब आप एक 1 की जरूरत है: लागू नहीं मान जो तय कर रहे हैं और नहीं करेंगे (और नहीं कर सकते हैं) को बदलने के साथ नक्शा। दूसरी ओर एक शब्दकोश एक म्यूटेबल कुंजी मान जोड़े के 1: 1 मैपिंग प्रदान करता है, इसलिए इसे मान जोड़ने या निकालने के लिए अपडेट किया जा सकता है।

+1

दरअसल, प्रत्येक प्रविष्टि एक 'IEnumerable एक' 'T' के बजाय है। – Gabe

+1

+1 सच होने पर, इंटरफ़ेस, अपडेट-म्यूटेबिलिटी, मुख्य आवश्यकताएं इत्यादि के साथ अंतर पर अधिक अच्छा लगेगा। –

+0

'ILookup ' लागू करने से अपरिवर्तनीयता की कोई गारंटी नहीं है। आपका जवाब यह इंगित करता है कि यह है। यह केवल एक लुकअप के एक readon * दृश्य * प्रदान करता है। साथ ही, एक विधि जो 'ILookup ' स्वीकार करती है, लुकअप की सामग्री को बदलने से संभाल सकता है, उस विधि तक है- और यदि कोई दस्तावेज नहीं है तो एक लुकअप को म्यूट करने से बचने के लिए सुरक्षित है जबकि विदेशी कोड अभी भी इसका संदर्भ दे रहा है और आपके उपयोग के मामले के आधार पर । कैसे लोगों को गलत तरीके से लगता है कि लागू करने 'IReadOnlyList ' मतलब होना चाहिए कि एक सूची अपरिवर्तनीय है पर पूरी चर्चा देखें। – binki

2

यह IDictionary से कहीं अधिक सरल है। इसका उपयोग लिंक द्वारा किया जाता है। इसमें केवल Contains, Item और Count है। IDictionaryAdd, Remove, आदि

+0

क्या आपका मतलब है कि ILookup एक IDictionary का केवल पढ़ने वाला सबसेट है? –

+1

की तरह ... लेकिन प्रत्येक तत्व एक IGrouping है, इसलिए एक कुंजी के लिए कई तत्व हो सकते हैं ताकि यह अच्छी तरह से मानचित्र न हो। मैं शब्दकोश के लिए केवल पढ़ने के लिए इंटरफेस होना अच्छा होता। – Philippe

+2

@Philippe पढ़ शब्दकोश में केवल इंटरफ़ेस 'है IReadOnlyDictionary ' और 'शब्दकोश ' वर्ग इसे लागू की सभी आवृत्तियों ('ToDictionary' वर्ग उदाहरण देता है, तो यह भी काम करता है), इसलिए आप किसी भी शब्दकोश को केवल पढ़ने के रूप में उजागर कर सकते हैं। –

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