Kod źródłowy do pobrania: https://skydrive.live.com/redir?resid=BCCBFB57B3C672D0!117
Biblioteka .NET dostarcza wiele ułatwień w dziedzinie pracy nad zbiorami.
W ramach przypomnienia matematyki:
Do pracy ze zbiorami możemy podejść na dwa sposoby:
- Metody LINQ
- Kolekcja HashSet<T>
- takie same wartości w kolekcji są dopuszczalne
- nie chcemy modyfikować istniejącej kolekcji (źródła) - zwracamy IEnumerable<T>
- nie mogą się pojawić te same wartości więcej niż raz
- chcemy modyfikować oryginalną kolekcję
Metody LINQ:
Concat - sumuje dwa zbiory, dopuszczając do zduplikowanych wartości:
Code:
Union - sumuje dwa zbiory, jako rezultat zwracając elementy unikalne w obu zbiorach:
Code:
Distinct - zwraca tylko elementy unikalne:
Code:
Expect - różnica - wartości w pierwszym zbiorze, które nie występują w drugim:
Code:
Intersect - przecięcie zbiorów czyli część wspólna:
Code:
Rezultaty operacji:
Kolekcja HashSet<T>
Kolekcja ta została dodana w .NET wersji 3.5 czyli można rzec "dość późno". Jest to kolekcja oparta na kluczach, zawierająca tylko wartości unikalne. Dzięki swojej budowie operacje wyszukiwania, sprawdzania czy dany element już istnieje w kolekcji czy też usuwanie elementu mają złożoność liniową O(1). Operacje wywoływane na kolekcji powodują zmianę oryginalnej kolekcji. Aby odróżnić metody LINQ od HashSet<T> metody kolekcji posiadają słówko With np. UnionWith, IntersectWith:
Code:
Porównanie metod dla metod LINQ i kolekcji HashSet<T>:
Oczywiście metody które nie występują w LINQ łatwo można dopisać, np. dla operacji SetEquals kod LINQ będzie wyglądać następująco:
Code:
Brak komentarzy:
Prześlij komentarz