Asi každý, kdo někdy pracoval s PHP, u ASP občas postrádá nějakou funkci či vlastnost, která je v PHP, ale v ASP nikoli. Mě například chyběla možnost používat jako index pole místo číselné řady libovolné číslo či dokonce řetězec – ovšem do doby, dokud jsem neobjevil objekt Dictionary.

Objekt Dictionary nám pomůže všude tam, kde potřebujeme pracovat s polem, ale nevyhovuje nám jako index souvislá číselná řada počínající nulou. U tohoto objektu můžeme jako indexy použít libovolné textové řetězce. Pojem index asi nebude zcela přesný, s objektem nepracujeme vlastně jako s polem, ale jako s kolekcí jako například se session nebo application proměnnými.

Objekt musíme nejprve vytvořit:

Set Jmena = CreateObject(„Scripting.Dictionary“)

Jednotlivé prvky kolekce vytvoříme metodou object.add nazev_prvku, hodnota_prvku. Například:

Jmena.add „Jiri“, 331649
Jmena.add „Josef „, 308987
Jmena.add „Jan“, 294517
Jmena.add „Petr“, 265875
Jmena.add „Jaroslav“, 230915

K jednotlivým prvkům kolekce přistupujeme přes vlastnost objekt.Item(nazev_prvku):

Response.write Jmena.Item („Jan“)
Jmena.Item(„Petr“) = 230914
Jmena.Item(„Jiri“) = Jmena.Item(„Jiri“) + 1

Celou kolekci samozřejmě můžeme procházet pomocí cyklu for-each:

For Each k in Jmena
    response.write k & „-“ & Jmena.Item(k) & „<BR>“ & vbCrLf
next

Existenci prvku daného jména zjistíme metodou object.exists(jmeno_prvku):

if Jmena.Exists („Jan“) then response.write Jmena.Item („Jan“) & „<BR>“ & vbCrLf

Na místě názvu prvku samozřejmě může být proměnná, takže můžeme například napsat následující kód:

Jmeno = „Karel“
if Jmena.Exists(Jmeno) then
   response.write Jmena.Item(Jmeno) & „<BR>“ & vbCrLf
else
   Jmena.Add Jmeno, 0
end if

Počet prvků zjistíme pomocí vlastnosti object.count:

PocetJmen = Jmena.count

Celou kolekci můžeme převést na pole. Můžeme získat pole se seznam názvů jednotlivých prvků kolekce metodou object.keys nebo pole jejich hodnot metodou object.Items:

a = Jmena.Keys
For n = 0 to PocetJmen-1
    response.write a(n) & „<BR>“ & vbCrLf
next
b = Jmena.Items
For n = 0 to PocetJmen-1
    response.write b(n) & „<BR>“ & vbCrLf
next

Jednotlivé prvky kolekce můžeme samozřejmě i odstranit, a to buď jednotlivě metodou object.remove(jmeno_prvku)nebo všechny najednou metodou object.RemoveAll:

Jmena.Remove („Jan“) Jmena.RemoveAll

Poslední vlastností objektu Dictionary je vlastnost object.CompareMode, která může nabývat hodnot
0 = binární porovnávání, tj. Jmena.Item(„jan“) a Jmena.Item(„JAN“) jsou různé prvky
1 = textové porovnávání, tj. Jmena.Item(„jan“) a Jmena.Item(„JAN“) je tentýž prvek (tato hodnota je implicitní)

Uznávám, že práce s tímto objektem není zdaleka tak jednoduchá a pohodlná, jako práce se jmennými indexy v PHP, ale svůj účel splní a když nic lepšího nemáme…

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět