मुझे संग्रह की आवश्यकता है, std::set के समान, इसलिए प्रत्येक तत्व को केवल एक बार डाला जा सकता है, लेकिन मुझे यह तय करने के लिए अपना कस्टम तुलनित्र प्रदान करने की आवश्यकता है कि क्या तत्व समान हैं। मैं इसे सी # में कैसे कर सकता हूं? लगता है सी # बिल्कुल सेट नहीं है?
4 जवाब
.NET एक अनियंत्रित सेट प्रकार के साथ आता है जिसे कहा जाता है। HashSet<T>
, जिसके कई निर्माता उपयोगकर्ता द्वारा प्रदत्त IEqualityComparer<T>
उदाहरण:
var set = new HashSet<string>(StringComparer.CurrentCultureIgnoreCase);
set.Add("abc"); // the statement returns `true`
set.Add("def"); // the statement returns `true`
set.Add("abc"); // returns `false`, abc already exists in set
set.Contains("abc"); // returns `true` as expected
set.Contains("ABC"); // also `true`, thanks to our case-insensitive comparer
आप जिस वस्तु की तलाश कर रहे हैं वह HashSet<T>
है, जो केवल एक बार आइटम जोड़ेगी।
यदि आप अपनी समानता तुलनाओं को लागू करना चाहते हैं, तो आप कक्षा को IEqualityComparer<T>
लागू कर सकते हैं और वहां समानता के लिए तर्क प्रदान कर सकते हैं।
आप एक HashSet एक कस्टम IEqualityComparer<T>
इंस्टेंस के साथ।
आप का उपयोग कर सकते हैं SortedSet<T>
जिसमें constructor कस्टम IComparer
और डुप्लिकेट आइटम की अनुमति नहीं देता है:
सॉर्टेडसेट ऑब्जेक्ट प्रदर्शन को प्रभावित किए बिना सॉर्ट किए गए क्रम को बनाए रखता है क्योंकि तत्वों को डाला और हटा दिया जाता है। डुप्लिकेट तत्वों की अनुमति नहीं है. मौजूदा आइटम्स के सॉर्ट मानों को बदलना समर्थित नहीं है और इससे अनपेक्षित व्यवहार हो सकता है।
या SortedDictionary<TKey,TValue>
कस्टम तुलनाकर्ता चाबियों के लिए।
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।
GetHashCode
और फिरEquals
का उपयोग करता है।IEqualityComparer
के कस्टम कार्यान्वयन की आपूर्ति करते हैं या नहीं -GetHashCode()
सेट के अंतर्निहित हैशटेबल-जैसे भंडारण में लक्ष्य बकेट को हल करने के लिए आवश्यक है -Equals
का उपयोग किया जाता है टकरावों को हल करने के लिए। स्रोत देखेंEquals
स्पष्ट रूप से इस्तेमाल किया हुआ। हालांकि स्पष्ट कारणों से इसका उपयोग केवल तभी किया जाएगा जब हैशकोड मेल खाते हों।