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