Tablica asocjacyjna – Wiki

Tablica asocjacyjna

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji , szukaj

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ż


Walka na noże w amerykańskiej kampanii prezydenckiej
Zaostrza się kampania prezydencka w USA, pełna wzajemnych oskarżeń i ataków personalnych. Prezydent Barack Obama określa swego republikańskiego oponenta Mitta Romney'a mianem bezlitosnego kapitalisty, Romney natomiast oskarża go o powiększenie długu publicznego.



Największe organizacje lekarzy powołały sztab kryzysowy
Najważniejsze organizacje lekarskie w Polsce powołały sztab kryzysowy. Wezwał on medyków i świadczeniodawców do niepodpisywania umów z NFZ na wystawianie recept refundowanych.



Nowy wiersz Grassa, tym razem na temat Grecji
W niecałe dwa miesiące po opublikowaniu krytykującego Izrael wiersza niemiecki laureat literackiej nagrody Nobla Guenter Grass ponownie wdał się w poetycką polemikę na aktualny polityczny temat - tym razem postępowania UE wobec pogrążonej w kryzysie Grecji.



Odwrócenie trendów? PO już nie traci
Platforma Obywatelska zyskuje na poparciu, PiS traci. Różnica między tymi partiami wynosi 10 procent - takie są wyniki najnowszego sondażu telefonicznego TNS Polska dla programu Forum w Telewizji Polskiej.



Kombatanci upokorzeni na granicy? PiS interweniuje
Klub Parlamentarny PiS domaga się od premiera reakcji na potraktowanie kombatantów na granicy polsko-białoruskiej. Weterani, którzy jechali do Polski na zjazd łagierników-żołnierzy AK, zostali - według PiS - upokorzeni przez polską Straż Graniczną.



Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,