Czy ktoś wie, czy istnieje dobry odpowiednik Set
kolekcji Java w C #? Wiem, że można nieco naśladować zestaw za pomocą a Dictionary
lub a HashTable
, wypełniając, ale ignorując wartości, ale to nie jest zbyt elegancki sposób.
źródło
Czy ktoś wie, czy istnieje dobry odpowiednik Set
kolekcji Java w C #? Wiem, że można nieco naśladować zestaw za pomocą a Dictionary
lub a HashTable
, wypełniając, ale ignorując wartości, ale to nie jest zbyt elegancki sposób.
Wypróbuj HashSet :
Klasa HashSet (Of T) zapewnia operacje zestawu o wysokiej wydajności. Zestaw to kolekcja, która nie zawiera zduplikowanych elementów, a której elementy nie mają określonej kolejności ...
Pojemność obiektu HashSet (Of T) to liczba elementów, które obiekt może pomieścić. Pojemność obiektu HashSet (Of T) automatycznie wzrasta, gdy elementy są dodawane do obiektu.
Klasa HashSet (Of T) jest oparta na modelu zbiorów matematycznych i zapewnia wysokowydajne operacje na zestawach podobne do uzyskiwania dostępu do kluczy kolekcji Dictionary (Of TKey, TValue) lub Hashtable . Mówiąc prościej, klasę HashSet (Of T) można uznać za kolekcję Dictionary (Of TKey, TValue) bez wartości.
Kolekcja HashSet (Of T) nie jest sortowana i nie może zawierać zduplikowanych elementów ...
Jeśli korzystasz z .NET 3.5, możesz użyć
HashSet<T>
. To prawda, że .NET nie obsługuje zestawów tak dobrze jak Java.W PowerCollections Wintellect może pomóc też.
źródło
Jeśli używasz platformy .NET 4.0 lub nowszej:
W razie potrzeby sortowania użyj
SortedSet<T>
. W przeciwnym razie, jeśli nie, użyj,HashSet<T>
ponieważ służyO(1)
do wyszukiwania i manipulowania operacjami. NatomiastSortedSet<T>
służyO(log n)
do wyszukiwania i manipulowania operacjami.źródło
Korzystam z Iesi.Collections http://www.codeproject.com/KB/recipes/sets.aspx
Jest używany w wielu projektach OSS, po raz pierwszy zetknąłem się z nim w NHibernate
źródło
Używam otoki wokół
Dictionary<T, object>
, przechowując wartości zerowe w wartościach. Daje to O (1) dodawanie, wyszukiwanie i usuwanie na klawiszach, a do wszystkich celów i celów działa jak zestaw.źródło
Spójrz na PowerCollections na CodePlex. Oprócz Set i OrdersSet ma kilka innych przydatnych typów kolekcji, takich jak Deque, MultiDictionary, Bag, OrdersBag, OrdersDictionary i OrdersMultiDictionary.
Aby uzyskać więcej kolekcji, dostępna jest również ogólna biblioteka kolekcji C5 .
źródło
Wiem, że to stary wątek, ale napotkałem ten sam problem i stwierdziłem, że HashSet jest bardzo zawodny, ponieważ biorąc pod uwagę to samo ziarno, GetHashCode () zwrócił różne kody. Pomyślałem więc, dlaczego nie skorzystać z Listy i ukryć metodę dodawania w ten sposób
Ponieważ List używa metody Równości wyłącznie w celu ustalenia równości, możesz zdefiniować metodę Równości w swoim typie T, aby upewnić się, że uzyskasz pożądane wyniki.
źródło
List.Contains
jestO(n)
złożoność co oznacza, żeAdd
metoda staje się terazO(n)
złożoności, jak również. Zakładając kolekcję wewnętrzny nie musi być zmieniany,Add
zarównoList
iHashMap
powinny być odO(1)
złożoności. TLDR: To zadziała, ale jest hakujące i mniej wydajne.