Tablica asocjacyjna
Tablica asocjacyjna (tablica skojarzeniowa, mapa, słownik, ang. associative array, map, dictionary) – nazwa dla powszechnie stosowanego w informatyce abstrakcyjnego typu danych , który przechowuje pary (unikalny klucz, wartość) i umożliwia dostęp do wartości poprzez podanie klucza.
Formalnie typ tablicy asocjacyjnej odpowiada zbiorowi skończonych funkcji częściowych z typu klucza tablicy w typ wartości tablicy. Wiele złożonych danych jest naturalnie reprezentowanych przez tego typu tablice - np. drzewa plików, nagłówki poczty, nawet wszystkie atrybuty obiektu czy przestrzeń nazw zmiennych.
Tablice asocjacyjne realizowane są jako drzewa poszukiwań ( BST , AVL , trie itp.) lub tablice mieszające . Typ danych klucza może być praktycznie dowolny. Najczęściej są to łańcuchy znaków (napisy), ale także liczby (całkowite, zmiennoprzecinkowe, zespolone), krotki itp.
Spis treści |
[ edytuj ] Cechy tablic asocjacyjnych
Najczęściej próba przypisania wartości do nieistniejącego klucza powoduje automatyczne utworzenie klucza i wówczas następuje zwykłe przypisanie.
Na ogół przypisanie nowej wartości do istniejącego klucza zastępuje poprzednią wartość, ale np. w języku Ocaml z kluczami powiązane są listy wartości i przypisanie wartości do klucza powoduje tak naprawdę dopisanie jej na początek listy.
Sięgnięcie do nieistniejącego klucza zwykle kończy się błędem, ale np. w języku AWK zwracany jest pusty łańcuch znaków.
Istniejące implementacje tablic asocjacyjnych, bądź to dostępne bezpośrednio w danym języku programowania, bądź jako oddzielna biblioteka programistyczna na ogół oferują większą funkcjonalność niż tylko przypisanie wartości do klucza i pobranie wartości. Może to być:
- usunięcie pary (klucz, wartość);
- stwierdzenie, czy dany klucz znajduje się w tablicy (bez pobierania wartości);
- pobranie listy wszystkich kluczy lub przynajmniej możliwość iterowania po niej;
- pobranie listy wszystkich wartości;
- pobranie listy wszystkich par (klucz, wartość).
[ edytuj ] Tablice asocjacyjne w różnych językach programowania
[ edytuj ] AWK
W języku AWK tablica asocjacyjna nazywana jest tablicą (array). Kluczem może być pojedyncze wyrażenie (zamieniane zawsze na łańcuch znaków), albo lista wyrażeń, które są sklejane razem, a ciąg je separujący jest określony przez zmienną SUBSEP.
tablica["Wikipedia"] = "Wolna encyklopedia";
tablica[10, 12, 2006] = "środa";
tablica[255] = 0xff;
if ("Wikipedia" in tablica)
print tablica["Wikipedia"];
[ edytuj ] C++
W standardowej bibliotece języka C++ istnieje szablon map, który przyjmuje jako parametry dwa typy danych: typ klucza i typ wartości.
using namespace std; map<string, int> liczba_dni; // klucze typu string, wartości typu int liczba_dni["styczeń"] = 31; // wstawienie pary klucz, wartość liczba_dni["luty"] = 28; liczba_dni["marzec"] = 31; if (rok_przestępny) liczba_dni["luty"] = 29; // zmiana wartości związanej z kluczem "luty" // wyszukanie wartości klucza metodą 'find' if (liczba_dni.find("marzec") == liczba_dni.end()) cout << "klucz 'marzec' nie występuje w tablicy"; else cout << "liczba dni w marcu = " << liczba_dni["marzec"];
[ edytuj ] PHP
$tablica = array("klucz" => "wartosc", "nowy_klucz" => 2); // lub też: $tablica["klucz"] = "wartosc"; $tablica["nowy_klucz"] = 2;
[ edytuj ] Perl
$tablica_asocjacyjna{"nazwa_elementu"} %kolejna_tablica_asocjacyjna = (apple => "red", banana => "yellow", );
[ edytuj ] JavaScript
tab_asoc["klucz"]="wartosc";
[ edytuj ] Python
W języku Python tablice są nazywane słownikami (dictionary, dict). Kluczem może być dowolny obiekt, która posiada metodę __hash__. Jeśli chodzi o typy wbudowane, jako klucze mogą służyć liczby całkowite, zmiennoprzecinkowe, zespolone, łańcuchy znaków (zwykłe i unikodowe), niemodyfikowalne zbiory (immutable sets), krotki, a nawet funkcje. Natomiast listy, modyfikowalne zbiory ani słowniki nie mogą być kluczami.
tablica = {"Wikipedia": "Wolna encyklopedia", (10, 12, 2006): "środa", 255: 0xff} # wypisanie wszystkich kluczy z tablicy for klucz in tablica: print klucz # wypisanie wszystkich wartości z tablicy for wartosc in tablica.itervalues(): print wartosc # wypisanie jakie wartości są przypisane do jakich kluczy for klucz, wartosc in tablica.iteritems(): print klucz, '=>', wartosc # wyświetlenie wartości związanej z kluczem (łańcuchem) "Wikipedia" if "Wikipedia" in tablica: print tablica["Wikipedia"] print tablica.get("Wikipedia", "brak klucza 'Wikipedia'")
[ edytuj ] Zobacz też
Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

