Struktury danych w JavaScripcie – Słownik

Czas najwyższy na kolejny post z serii o strukturach danych. Tym razem bardzo prosta do zaimplementowania struktura – słownik.

Słownik składa się z danych połączonych w pary: klucz i wartość. Klucza używamy aby znaleźć przypisaną do niego wartość. Jak łatwo się domyślić klucze mają unikatowe wartości – nie mogą się powtarzać. Dobrym przykładem (i często przytaczanym), ilustrującym tę strukturę to książka adresowa. Imię i nazwisko to klucz, po którym szukamy w książce adresowej wartości czyli adresu.

Struktury danych w JavaScripcie – Słownik

Jeśli to wszystko brzmi znajomo, nie dziw się. Słownik to struktura bardzo zbliżona do JavaScriptowej notacja literału obiektu. Ja jednak do mojej implementacji słownika, dodam kilka dodatkowych funkcji, których w JavaScripcie nie ma.

Należy jednak pamiętać, że w tej serii postów chodzi nie tyle o stworzenie przydatnego kodu, co o poznanie i zrozumienie zasady działania klasycznych struktury danych. Ok, skoro to jest już jasne, przejdę do implementacji klasy Dictionary.

Struktury danych w JavaScripcie – Słownik. Implementacja

Oprócz pola, które będzie przechowywało dane klasa Dictionary zawierać będzie też następujące metody:

  • add – ta metoda dodaje nowy element do słownika.
  • remove – jak łatwo się domyślić po nazwie, metoda służąca do usuwania elementu.
  • has – dzięki tej metodzie, można sprawdzić czy dany klucz istnieje w słowniku.
  • get – ta metoda zwraca wartość pod konkretnym kluczem.
  • clear – ta metoda usuwa wszystkie elementy słownika.
  • size – ta metoda zwraca ilość elementów w słowniku.
  • keys – metoda, która zwraca tablicę wszystkich kluczy elementów słownika.
  • values – metoda, która zwraca tablicę wszystkich wartości elementów słownika.
  • viewAll – ta metoda wypisuje w konsoli całą zawartość słownika.

A oto kod:

Tak jak pisałem, nie jest to skomplikowana klasa. Na początku do pola data przypisuję pusty obiekt. To on będzie przechowywał wszystkie elementy dodawane do słownika. Następnie definuję funkcje klasy.

Metody add oraz remove wykorzystują podstawowe właściwości JSowych obiektów. Dodaję nowy element do obiektu data używając zapisu tablicy asocjacyjnej. Nowe dane przekazywane są jako argumenty metodzie add. Usuwanie elementów odbywa się za pomocą operatora delete. Usuwa on z obiektu pole i metodę, której nazwa podana jest po nim.

Metoda has przyjmuje jeden argument i sprawdza czy istnieje on w słowniku. Korzysta w tym celu z operatora in. Operator ten zwraca true, jeżeli wymieniony przed nim klucz zawarty jest w wymienionym po operatorze obiekcie. W innym wypadku zwracane jest false. Ten mechanizm wykorzystuje następna metoda get. Za pomocą has sprawdza czy podany klucz jest w słowniku, jeżeli tak zwraca przypisaną do niego wartość, w innym wypadku zwracane jest undefined.

Metoda clear korzysta z pętli for in. Pętla ta służy do iterowania po polach obiektu zdefiniowanego po operatorze in. Dla każdego pola zwraca nazwę aktualnego klucza w zmiennej zdefiniowanej przed operatorem in. Dzięki tej pętli oraz z pomocą operatora delete usuwam wszystkie pola z obiektu zawierającego elementy słownika.

Kolejna metoda, size, również korzysta z pętli for in. Tym razem jednak nie zmienia nic w polach obiektu słownika a jedynie liczy każdy obieg. Na końcu zwraca liczbę obiegów, będącą zarazem liczbą elementów zawartych w słowniku.

Metody keys oraz values zwracają tablicę z odpowiednimi informacjami pobranymi z elementów słownika. Do tego również wykorzystuję pętle for in. W pętli zbieram klucze / wartości, dodaję je do tablicy, po czym zwracam tablicę.

Ostatnia metoda to viewAll. Tutaj również wykorzystana zostaje pętla for in. Tym razem każdy obieg pętli wypisuje w konsoli klucz oraz wartość danego elementu.

Tak jak pisałem, jest to dość prosta struktura danych. Jednak bardzo fajnie ilustruje, że można bardzo w efektywny sposób przechowywać dane, nie korzystając z listy/tablicy.

na koniec warto jeszcze przetestować klasę słownika. Przykładowe testy mogą wyglądać tak:

Sprawdź w konsoli czy wszystko działa. Wygląda na to, że wszystko śmiga jak należy. Gratulacje, implementacja słownika w JavaScripcie udana 🙂

Jeżeli masz jakieś pytania odnośnie słownika, lub którejś z poprzednio opisanych struktur danych, może śmiało je zadać w komentarzach poniżej. Oczywiście świetnym miejscem na kontakt ze mną jest też moja strona na facebooku. Zachęcam przy okazji do polubienia jej, dzięki temu będziesz na bieżąco ze wszystkimi nowościami, które pojawiają się na blogu 🙂

Dodaj komentarz

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