Kolekcje
Przegląd zagadnień
Zajęcia są poświęcone omówieniu przydatnych rodzajów kolekcji. Kolejno pojawią się opisy i przykłady listy, kolejki, stosu i słownika.
W ostatniej części laboratorium zadaniem studentów będzie napisanie kilku programów spełniających określone wymogi w zakresie kolekcji.
Lista
Klasa List jest tablicą rozwiązującą jeden z podstawowych problemów pojawiających się przy używaniu standardowych obiektów klasy System.Array - konieczność ustalenia już na samym początku rozmiaru.
Wraz z klasą dostarczanych jest wiele przydatnych metod i właściwości. Szczególnie interesuje nas metoda Add().
Lista - przykład (1)
Przygotowujemy przestrzeń nazw Kolekcja z klasą publiczną Pracownik, którą będziemy przechowywać na liście.
Lista - przykład (2)
W drugiej części kodu używam klasy testowej, w której najpierw tworzymy dwie listy, a następnie w pętlach for dodajemy do nich elementy przy pomocy wspomnianej wcześniej metody Add().
Kolejka
Kolejki wykorzystywane są często w sytuacjach, gdy dysponujemy ograniczoną pulą zasobów. Pierwszy dodany element jest zawsze pierwszym obsłużonym. Podstawowy mechanizm usuwa element z kolejki po zwróceniu jego wartości.
Kolejki tworzy się w języku C# wykorzystując do tego klasę Queue. Podstawowe mechanizmy dodawania i usuwania elementu (ze zwracaniem wartości) są obsługiwane przez metody Enqueue() oraz Dequeue().
Kolejka - przykład
Przykład ilustruje sposób użycia kolejki.
Najpierw dodajemy elementy do kolejki w pętli for, a następnie wyświetlamy zawartość kolejki wraz z elementami zwracanymi przez metody Peek() oraz Dequeue().
Analizując efekt wykonania programu można wyraźnie dostrzec różnice między działaniem obu metod.
W metodzie Wyświetl() wykorzystany został interfejs IEnumerable, zawierający metodę GetEnumerator(), która zwraca w tym przypadku implementację typu IEnumerator<Int32>. Jak się łatwo domyślić, jest ona związana z licznikiem.
Stos
Stos zawsze obsługuje jako pierwszy ten element, który zostanie dodany na końcu. Można o nim myśleć, jak o kupce książek na biurku - żeby dostać się do którejś na spodzie, najpierw trzeba usunąć wszystkie książki położone na niej.
Obsługa stosu przypomina obsługę kolejki - prym wiodą tu metody Push(), Pop() oraz Peek() - służące odpowiednio do umieszczania elementu na stosie, usuwania go z jednoczesnym zwracaniem wartości oraz do zwracania wartości.
Stos - przykład
Przykład zastosowania stosu jest analogiczny do prezentowanego kilka slajdów wcześniej sposobu działania kolejki.
Jedynymi różnicami są zastosowanie metod z klasy Stack oraz sposób obsługi właściwy dla stosu (ostatni dodany element jest zawsze obsługiwany na początku)
Słownik
Słownik jest rodzajem kolekcji, który doskonale sprawdza się w przypadku operacji na danych dwuczłonowych jak chociażby państwa i ich stolice, czy na przykład leki i ich producenci.
Regułą, której powinno się trzymać, jest prostota klucza. Bardziej skomplikowane elementy można przechowywać jako powiązaną z kluczem wartość.
Klasa Dictionary języka C# umożliwia łatwe dodawanie elementów oraz szybkie wyszukiwanie wartości w słowniku.
Podsumowanie
Kolekcje często są dużo lepszym rozwiązaniem niż standardowe tablice. Wybór odpowiedniego rodzaju kolekcji powinien być zdeterminowany przez indywidualne potrzeby aplikacji. Warto poświęcić trochę czasu na zastanowienie się nad właściwym wyborem typu kolekcji.
Kolejnym krokiem po opanowaniu kolekcji powinno być bliższe przyjrzenie się interfejsom, potrafiącym znacznie ułatwić życie programisty.
Pytania sprawdzające
Pytania sprawdzające:
1.Wymień podstawowe różnice między kolejką a stosem.
2. Kiedy lepiej używać tablic zamiast podanych na bieżących zajęciach typów kolekcji?
Laboratorium
1. Napisz aplikację pełniącą funkcję książki telefonicznej.
2. Przygotuj program przenoszący monety ułożone jedna na drugiej w inne miejsce na stole (po jednej monecie).
3. Napisz prosty system informujący pacjenta czekającego w kolejce do lekarza, że przyszła jego kolej wejścia. Uwzględnij proces rejestracji.
L
L