Asociativní pole

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Asociativní pole (nebo také hash podle nejčastější implementace) je pole, jehož prvky nejsou indexovány pomocí posloupnosti celých čísel, ale pomocí klíčů. Klíčem může být číslo (v nesekvenční posloupnosti), textový řetězec a jiné. Některé programovací jazyky dovolují použít kombinaci sekvenčního indexování (jako u klasického pole) a asociativního indexování pole.

Význam asociativního pole spočívá v jednodušším zápisu programu, při kterém odpadají konstrukce pro vyhledávání prvku v poli.

Implementace[editovat | editovat zdroj]

Protože přímo z klíče nelze spočítat index (nebo adresu) prvku v poli, je zapotřebí prvek podle klíče vyhledat. Nejpoužívanější metodou je mechanismus zvaný hašovací funkce (angl. hash function).

Příklad[editovat | editovat zdroj]

Jazyk Perl[editovat | editovat zdroj]

%foo = (a=>"1", b=>"10", c=>"100");
print $foo{c}, $foo{b}, $foo{a};

vypíše 100101

Jazyk PHP[editovat | editovat zdroj]

$foo = array("a"=>"1", "b"=>"10", "c"=>"100");
echo $foo["c"].$foo["b"].$foo["a"];

vypíše 100101

Jazyk JavaScript[editovat | editovat zdroj]

foo = { a:"1", b:"10", c:"100" };
alert( foo["c"]+foo["b"]+foo["a"] );

vypíše 100101

Jazyk Python[editovat | editovat zdroj]

hash = {"a":1, "b":2, 5:"b"}
print hash["a"], hash["b"], hash[5]

vypíše 1 2 b

Jazyk C++ s knihovnou Qt[editovat | editovat zdroj]

Pole je s určením typů (v příkladu je klíčem datový typ Qstring, hodnotou integer), v Qt je k dispozici i QMultiHash.

QHash<QString, int> hash;
hash["a"] = 1;
hash["b"] = 3;
hash["c"] = 7;
out<<hash["a"]<<hash["b"]<<hash["c"];

vypíše: 137

Programovací jazyky[editovat | editovat zdroj]

Známé programovací jazyky, které mají asociativní pole implementováno jako abstraktní datový typ:

Některé programovací jazyky, které nemají přímo implementovanou podporu asociativního pole, ale obsahují implementaci tohoto typu pomocí sady funkcí nebo metod třídy v knihovnách:

  • C++STL, třída map
  • C++knihovna Qt
  • Java – The Collections Framework, třídy implemetující rozhraní Map (HashMap, TreeMap,…)

Související články[editovat | editovat zdroj]