क्या C # में एक संग्रह है जो आपको इसमें डुप्लिकेट आइटम नहीं जोड़ने देगा? उदाहरण के लिए, मूर्ख वर्ग के साथ
public class Customer {
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public override int GetHashCode() {
return (FirstName + LastName + Address).GetHashCode();
}
public override bool Equals(object obj) {
Customer C = obj as Customer;
return C != null && String.Equals(this.FirstName, C.FirstName) && String.Equals(this.LastName, C.LastName) && String.Equals(this.Address, C.Address);
}
}
निम्नलिखित कोड (स्पष्ट रूप से) एक अपवाद फेंक देगा:
Customer Adam = new Customer { Address = "A", FirstName = "Adam", LastName = "" };
Customer AdamDup = new Customer { Address = "A", FirstName = "Adam", LastName = "" };
Dictionary<Customer, bool> CustomerHash = new Dictionary<Customer, bool>();
CustomerHash.Add(Adam, true);
CustomerHash.Add(AdamDup, true);
लेकिन क्या कोई ऐसा वर्ग है जो समान रूप से विशिष्टता की गारंटी देगा, लेकिन बिना KeyValuePairs के? मैंने सोचा था HashSet<T>
कि ऐसा होगा, लेकिन डॉक्स को पढ़ने से लगता है कि क्लास सिर्फ एक सेट इंप्लीमेंटेशन ( फिगर ) है।
HashSet<T>
अपर्याप्त क्यों है?
Dictionary<K,V>
क्लास किसी भी तरह के ऑर्डर की गारंटी नहीं देता है।
HashSet<T>.Add
विधि से लौटाए गए बूल मान की जांच करें और जब फेंकें false
...
HashSet<T>
। MSDN का कहना है कि "HashSet <T> वर्ग उच्च प्रदर्शन सेट संचालन प्रदान करता है। एक सेट एक संग्रह है जिसमें कोई डुप्लिकेट तत्व नहीं होते हैं, और जिनके तत्व किसी विशेष क्रम में नहीं होते हैं।"