क्या किसी को पता है कि क्या Set
C # में Java के कलेक्शन के बराबर है ? मुझे पता है कि आप कुछ हद तक एक Dictionary
या HashTable
पॉप्युलेट करके या मूल्यों की अनदेखी करते हुए सेट की नकल कर सकते हैं, लेकिन यह बहुत सुरुचिपूर्ण तरीका नहीं है।
क्या किसी को पता है कि क्या Set
C # में Java के कलेक्शन के बराबर है ? मुझे पता है कि आप कुछ हद तक एक Dictionary
या HashTable
पॉप्युलेट करके या मूल्यों की अनदेखी करते हुए सेट की नकल कर सकते हैं, लेकिन यह बहुत सुरुचिपूर्ण तरीका नहीं है।
जवाबों:
HashSet आज़माएँ :
HashSet (T का वर्ग) उच्च प्रदर्शन सेट संचालन प्रदान करता है। एक सेट एक संग्रह है जिसमें कोई डुप्लिकेट तत्व नहीं हैं, और जिनके तत्व किसी विशेष क्रम में नहीं हैं ...
HashSet (T) ऑब्जेक्ट की क्षमता उन तत्वों की संख्या है जो ऑब्जेक्ट धारण कर सकता है। एक हैशसेट (टी) ऑब्जेक्ट की क्षमता स्वचालित रूप से बढ़ जाती है क्योंकि तत्वों को ऑब्जेक्ट में जोड़ा जाता है।
HashSet (T का) वर्ग गणितीय सेटों के मॉडल पर आधारित है और शब्दकोश (TKey, TValue) या हैशटेबल संग्रह की कुंजी तक पहुँचने के समान उच्च प्रदर्शन सेट संचालन प्रदान करता है । सरल शब्दों में, HashSet (T) वर्ग को मूल्यों के साथ एक शब्दकोश (TKey, TValue) संग्रह के रूप में माना जा सकता है ।
HashSet (T का) संग्रह सॉर्ट नहीं किया गया है और इसमें डुप्लिकेट तत्व नहीं हो सकते ...
यदि आप .NET 3.5 का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं HashSet<T>
। यह सच है कि .NET सेट के साथ-साथ जावा के लिए भी पूरा नहीं करता है।
Wintellect PowerCollections भी मदद मिल सकती है।
यदि आप .NET 4.0 या बाद में उपयोग कर रहे हैं:
मामले में जहां आपको छंटाई की आवश्यकता है, तब उपयोग करें SortedSet<T>
। अन्यथा यदि आप नहीं करते हैं, तो इसका उपयोग करें HashSet<T>
क्योंकि यह O(1)
खोज के लिए है और संचालन में हेरफेर करता है। जबकि SortedSet<T>
है O(log n)
खोज के लिए और संचालन में हेरफेर।
मैं Iesi.Collections http://www.codeproject.com/KB/recipes/sets.aspx का उपयोग करता हूं
यह OSS परियोजनाओं के बहुत से उपयोग किया जाता है, मैं पहली बार NHibernate में आया था
मैं Dictionary<T, object>
मानों में नल के संचय के आसपास एक आवरण का उपयोग करता हूं । यह O (1) ऐड, लुकअप और कीज़ को हटाता है, और सभी इंटेंट्स और उद्देश्यों के लिए एक सेट की तरह कार्य करता है।
CodePlex पर PowerCollections पर एक नज़र है । सेट और ऑर्डरडसेट के अलावा इसके कुछ अन्य उपयोगी संग्रह प्रकार हैं जैसे कि डेक्स, मल्टीएडर्ब, बैग, ऑर्डरडैब, ऑर्डरडेडबर्ड और ऑर्डरेडमुलटाइडर।
अधिक संग्रह के लिए, C5 जेनरिक कलेक्शन लाइब्रेरी भी है ।
मुझे पता है कि यह एक पुराना धागा है, लेकिन मैं एक ही समस्या में चल रहा था और HashSet को बहुत अविश्वसनीय पाया क्योंकि एक ही बीज, GetHashCode () को अलग-अलग कोड दिए गए। तो, मैंने सोचा, क्यों न एक सूची का उपयोग किया जाए और इस तरह से ऐड पद्धति को छिपाया जाए
public class UniqueList<T> : List<T>
{
public new void Add(T obj)
{
if(!Contains(obj))
{
base.Add(obj);
}
}
}
क्योंकि सूची समानता का निर्धारण करने के लिए पूरी तरह से समान पद्धति का उपयोग करती है, आप अपने इच्छित परिणाम प्राप्त करने के लिए अपने टी प्रकार पर समान पद्धति को परिभाषित कर सकते हैं।
List.Contains
की है O(n)
जटिलता जो मतलब है कि आपके Add
विधि अब हो जाता है O(n)
और साथ ही जटिलता। यह मानकर कि आंतरिक संग्रह को Add
दोनों के लिए , आकार बदलने की आवश्यकता नहीं है List
और जटिलता HashMap
की होनी चाहिए O(1)
। TLDR: यह काम करेगा, लेकिन यह हैकरी और कम कुशल है।