दिलचस्प पोस्ट
विशिष्ट डोमेन नाम से Google OAuth2.0 के साथ लॉगिन ईमेल प्रतिबंधित करें किसी दिए गए इनपुट से संबद्ध एचटीएमएल लेबल खोजें पायथन के साथ एक UTF8 सीएसवी फ़ाइल पढ़ना अजाक्स पोस्ट धारावाहिक () में बटन का नाम और मूल्य शामिल नहीं है गतिविधि शुरू होने पर नरम कीबोर्ड छिपाने के लिए रूबी में ग्रिड उत्पन्न करना ओरेकल के साथ काम करते समय बैच के लाईन को फ्लिएंट एनआईबीनेट के साथ कैसे कार्यान्वित करें? एक तत्व की वास्तविक, अस्थायी-बिंदु वाली चौड़ाई प्राप्त करना RestSharp JSON पैरामीटर पोस्टिंग मैं कोष्ठक के भीतर पाठ को एक regex के साथ कैसे निकाल सकता हूं? जावा: पार्स जावा स्रोत कोड, निकालें तरीकों दो तिथियों के बीच दिन का अंतर ढूंढें (सप्ताहांत के दिनों को छोड़कर) एचटीटीपी समर्थन के साथ एचटीटीप्लेस्टनर संबंधित पथ Xcode में काम नहीं करना सी ++ Excel से एक VBA सरणी में अनन्य मानों को पॉप्युलेट करें

हैशसेट जो आदेश को संरक्षित करता है

मुझे एक हैशसेट की आवश्यकता है जो प्रविष्टि क्रम को सुरक्षित रखता है, क्या इस रूपरेखा में इसके किसी भी लागूकरण हैं?

Solutions Collecting From Web of "हैशसेट जो आदेश को संरक्षित करता है"

मानक .NET HashSet प्रविष्टि क्रम को संरक्षित नहीं करता है साधारण परीक्षणों के लिए प्रविष्टि के आदेश को किसी दुर्घटना के कारण संरक्षित किया जा सकता है, लेकिन यह गारंटी नहीं है और हमेशा ऐसा काम नहीं करता। यह साबित करने के लिए कि बीच में कुछ निकाले जाने के लिए पर्याप्त है।

इस प्रश्न को उस पर अधिक जानकारी के लिए देखें: क्या हैशसेट प्रविष्टि क्रम को संरक्षित करता है?

मैंने संक्षेप में एक HashSet लागू किया है जो प्रविष्टि ऑर्डर की गारंटी देता है यह ऑर्डर को संरक्षित करने के लिए आइटम्स और LinkedList को देखने के लिए Dictionary का उपयोग करता है। ओ में सभी तीन प्रविष्टि, हटाने और लुकअप कार्य अभी भी (1)।

 public class OrderedSet<T> : ICollection<T> { private readonly IDictionary<T, LinkedListNode<T>> m_Dictionary; private readonly LinkedList<T> m_LinkedList; public OrderedSet() : this(EqualityComparer<T>.Default) { } public OrderedSet(IEqualityComparer<T> comparer) { m_Dictionary = new Dictionary<T, LinkedListNode<T>>(comparer); m_LinkedList = new LinkedList<T>(); } public int Count { get { return m_Dictionary.Count; } } public virtual bool IsReadOnly { get { return m_Dictionary.IsReadOnly; } } void ICollection<T>.Add(T item) { Add(item); } public bool Add(T item) { if (m_Dictionary.ContainsKey(item)) return false; LinkedListNode<T> node = m_LinkedList.AddLast(item); m_Dictionary.Add(item, node); return true; } public void Clear() { m_LinkedList.Clear(); m_Dictionary.Clear(); } public bool Remove(T item) { LinkedListNode<T> node; bool found = m_Dictionary.TryGetValue(item, out node); if (!found) return false; m_Dictionary.Remove(item); m_LinkedList.Remove(node); return true; } public IEnumerator<T> GetEnumerator() { return m_LinkedList.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public bool Contains(T item) { return m_Dictionary.ContainsKey(item); } public void CopyTo(T[] array, int arrayIndex) { m_LinkedList.CopyTo(array, arrayIndex); } } 

आप इस कार्यक्षमता को आसानी से KeyedCollection<TKey,TItem> टीके और टीआईटीएम के लिए एक ही प्रकार के तर्क को निर्दिष्ट कर सकते हैं:

 public class OrderedHashSet<T> : KeyedCollection<T, T> { protected override T GetKeyForItem(T item) { return item; } } 

अगर आपको Add , Remove , Contains और ऑर्डर संरक्षण की लगातार जटिलता की आवश्यकता है, तो इसमें कोई भी संग्रह नहीं है। NET Framework 4.5।

यदि आप तृतीय पक्ष कोड के साथ ठीक हैं, तो मेरी रिपॉझिटरी (अनुमोदित एमआईटी लाइसेंस) पर नज़र डालें: https://github.com/OndrejPetrzilka/Rock.Collections

वहां OrderedHashSet<T> संग्रह:

  • क्लासिक HashSet<T> स्रोत कोड पर आधारित (.NET कोर से)
  • सम्मिलन के आदेश को सुरक्षित रखता है और मैन्युअल पुनरीक्षण की अनुमति देता है
  • विशेषताएं उलट संख्या
  • HashSet<T> रूप में एक ही ऑपरेशन जटिलताओं है
  • HashSet<T> की तुलना में ऑपरेशन Add और Remove 20% धीमी है
  • प्रति आइटम की स्मृति के 8 और अधिक बाइट खपत करता है