HashSet

HashSet<T>
Zestaw HashSet reprezentuje zestaw unikalnych elementów, podobnie jak zestaw matematyczny (np. { 1, 2, 3, 4, 5 }). Zestaw nie może zawierać duplikatów, a kolejność elementów nie ma znaczenia. Tak więc { 1, 2, 3, 4, 5 } i { 5, 4, 3, 2, 1 } są równe.

Użyj zestawu HashSet, gdy potrzebujesz super szybkich wyszukiwań na unikalnej liście elementów. Na przykład możesz przetwarzać listę zamówień i dla każdego zamówienia musisz szybko sprawdzić kod dostawcy z listy prawidłowych kodów dostawcy.

HashSet jest podobny do Dictionary, to zbiór oparty na haszowaniu, więc wyszukiwanie jest bardzo szybkie. Ale w przeciwieństwie do słownika nie przechowuje par klucz / wartość; przechowuje tylko wartości. Tak więc każdy obiekt powinien być unikalny, a to zależy od wartości zwróconej z metody GetHashCode.

Jeśli więc zamierzasz przechowywać niestandardowe typy w zestawie, musisz zastąpić metody GetHashCode i Equals w swoim typie.

Aby utworzyć zestaw HashSet:

var hashSet = new HashSet<int>();

Możesz dodawać / usuwać obiekty do HashSet podobnie jak do listy:

// Zainicjuj zestaw przy użyciu składni inicjalizacji obiektu
var hashSet = new HashSet<int>() { 1, 2, 3, 4, 5 };
 
// Dodaj obiekt
hashSet.Add(6);
 
// Usuń obiekt
hashSet.Remove(4);
 
// Usuń wszystkie obiekty
hashSet.Clear();
 
// Sprawdź, czy zestaw zawiera obiekt
var contains = hashSet.Contains(3);
 
// Zwruć liczbę obiektów w zestawie
var count = hashSet.Count;

HashSet zapewnia wiele operacji na zestawach matematycznych:

// Zmodyfikuj zestaw, tak aby zawierał tylko obiekty obecne w 1 zestawie i 2 zestawie
hashSet.IntersectWith(another);
 
// Usuń wszystkie obiekty w innym „another" zestawie z „hashSet”
hashSet.ExceptWith(another);
 
// Zmodyfikuj zestaw, aby uwzględnić wszystkie obiekty zawarte w nim samym, w „innym” zestawie lub w obu
hashSet.UnionWith(another);
 
var isSupersetOf = hashSet.IsSupersetOf(another);
var isSubsetOf = hashSet.IsSubsetOf(another);
var equals = hashSet.SetEquals(another);

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *