Hash! vector! a map!



Tyto datové typy si zasluhují samostatnou kapitolu. Mohou výrazně zlepšit kvalitu a rychlost práce.

Hash! a vector! jsou výkonné řady, zejména u velkých sestav.

Doporučuji před dalším čtením nahlédnout do kapitol Bloky a řady.

hash!

hash! je řada, upravená pro rychlejší vyhledávání. Protože "hašování" spotřebovává zdroje, nemá cenu vytvářet  hash!  pro řady, které budou prohledávány jenom několikrát.  Pokud však má být vaše řada prohledávaná často, vyplatí se z ní vytvořit hash! . Webová stránka Rebolu tvrdí, že vyhledávání může být 650 krát rychlejší než u normálních řad.


>> a: make hash! [a 33 b 44 c 52]
== make hash! [a 33 b 44 c 52]

>> select a [c]
== 52

>> select a 'c
== 52

>> a/b
== 44

Jinak to jsou řady, jejichž hodnoty jsou interně vnímané jako skupiny dvojic.

vector!

Vektory jsou výkonné řady položek typu integer! ,float!, char! nebo percent!.

K vytvoření vektoru použijete příkaz  make vector!

Zatímco  hash!  umožňuje rychlejší vyhledávání,   vector!  umožňuje rychlejší provádění matematických operací, noboť jsou prováděny pro celou řadu najednou.


>> a: make vector! [33 44 52]
== make vector! [33 44 52]

>> print a
33 44 52

>> print a * 8
264 352 416


Všimněte si, že to nejde udělat s blokem, patřícím rovněž do skupiny series!:


>> a: [2 3 4 5]

== [2 3 4 5]

>> print a * 2

*** Script Error: * does not allow block! for its value1 argument

*** Where: *

*** Stack:  


map!

Mapy jsou vysoce výkonné slovníky, které sdružují klíče s hodnotami (key1: val1  key2: val2 ... key3: val3).

Mapy nejsou řadami. Nelze u nich uplatnit většinu příkazů pro řady (series).

Pro vyjmutí hodnoty z mapy použijeme příkaz select  a pro zadání hodnoty použijeme specielní akci: put.

>> a: make map! ["mini" 33 "winny" 44 "mo" 55]
== #(
       "mini" 33
       "winny" 44
       "mo" 55
...

>> print a
"mini" 33
"winny" 44
"mo" 55

>> print select a "winny"
44

>> put a "winny" 99
== 99

>> print a
"mini" 33
"winny" 99
"mo" 55