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:
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.