[nested] map of (,: key;value) entries
FLAT MAPS
creating a map:
MAP=: empty'' NB. you should've guessed!
MAP=: 1 2 3 'one' setmap empty'' NB. with some values
MAP=: ('k1';i.3),:('k2';'qq') NB. declaratively
changing values:
MAP=: (i.3 4) 'k2' setmap MAP NB. similar to amend, "}"
k1
|
0 1 2
|
k2
|
0 1 2 3
4 5 6 7
8 9 10 11
|
adding values:
MAP=: 'qq' 'k3' setmap MAP NB. same as setting
k1
|
0 1 2
|
k2
|
0 1 2 3
4 5 6 7
8 9 10 11
|
k3
|
qq
|
removing entries:
NB. i.e. setting to nothing
MAP=: 'k2' setmap MAP NB. graceful for missing keys
getting values:
NB. similar to From '{'
VALUE=: 'k1' getmap MAP NB. missing keys gracefully return empty''
0 1 2
getmap MAP NB. catalog of keys, like '{'
index of the key:
INDEX=: 'k4' ndxmap MAP
existance of key:
BOOL=: 'k4' hasmap MAP
NESTED MAPS
build a nested map:
MAPX=: 3 'k2.k6' setmapx 'val' 'k2.k4' setmapx 1 'k1.k3' setmapx empty''
MAPX=: 3 'k2.k4.k8' setmapx (i.3 4) 'k1.k5' setmapx MAPX
k1
|
k3
|
1
|
k5
|
0 1 2 3
4 5 6 7
8 9 10 11
|
|
k2
|
|
removing nested entries:
NB. i.e. setting to nothing
'k1.k5' setmapx 'k2' setmapx MAPX
value of deep key from nested map:
'k1.k3' getmapx MAPX
1
'k2.k4' getmapx MAPX
'k2.k4.' getmapx MAPX
val
getmapx MAPX NB. catalog of nested keys, like '{'
k1.k3
|
k1.k5
|
k2.k4.
|
k2.k4.k8
|
k2.k6
|
flatmap MAPX NB. covert nested map to flat
k1.k3
|
1
|
|
k1.k5
|
0 1 2 3
4 5 6 7
8 9 10 11
|
|
k2.k4.
|
val
|
|
k2.k4.k8
|
3
|
|
k2.k6
|
3
|
|
MAPX -: flatmapx flatmap MAPX NB. reverse of flattening
1
strmap MAPX NB. covert nested map to multiline string
k1.k3 1 NB. useful for storing and restoring config
k1.k5 i.3 4
k2.k4. 'val'
k2.k4.k8 3
k2.k6 3
MAPX -: strmapx strmap MAPX NB. reverse from string
1
CMAP=: 0 : 0 NB. build nested map from COMPACT string
k1 .k3 1 .k5 i.3 4
k2 .k4. 'val' .k4.k8 3 .k6 3
)
MAPX -: strmapc CMAP
1
AUTHOR
(C) Oleg Kobchenko , 10/12/2003
GPL, AS-IS, NO WARRANTY
10/23/2003 added strmap[x|c]
Name |
Type |
Description |
DELIM |
verb |
nested keys delimiter |
flatmap |
verb |
convert nested map to flat map of leaves |
flatmapx |
verb |
convert flat map to nested |
getmap |
verb |
[dyad] value for a key |
getmap |
verb |
[monad] list map keys |
getmapx |
verb |
[dyad] value for a deep nexted key |
getmapx |
verb |
[monad] list nested map keys |
hasmap |
verb |
existance of the key |
ismap |
verb |
being a map |
ndxmap |
verb |
index of the key |
setmap |
adverb |
[dyad] add/change map value |
setmap |
adverb |
[monad] remove map entry |
setmapx |
adverb |
[dyad] add/change value for a deep nested key |
setmapx |
adverb |
[monad] remove a nested entry |
strmap |
verb |
convert nested map to multiline string |
strmapc |
verb |
convert compact string to nested map |
strmapx |
verb |
convert multiline string to nested map |
DELIM
nested keys delimiter
in 'k1.k2.k3' DELIM=: '.' (default)
flatmap
convert nested map to flat map of leaves
MAP=: flatmap MAPX
flatmapx
convert flat map to nested
MAPX=: flatmapx MAP
getmap
[dyad] value for a key
VALUE=: 'key' getmap MAP
getmap
[monad] list map keys
KEYS=: geymap MAP
getmapx
[dyad] value for a deep nexted key
VALUE=: 'k1.k2.k3' getmapx MAPX
getmapx
[monad] list nested map keys
KEYS=: geymapx MAP
hasmap
existance of the key
BOOL=: 'key' hasmap MAP
ismap
being a map
BOOL=: ismap MAP
ndxmap
index of the key
INDEX=: 'key' ndxmap MAP
setmap
[dyad] add/change map value
MAP=: VALUE 'key' setmap MAP
setmap
[monad] remove map entry
MAP=: 'key' setmap MAP
setmapx
[dyad] add/change value for a deep nested key
MAPX=: VALUE 'k1.k2.k3' setmapx MAPX
setmapx
[monad] remove a nested entry
MAPX=: 'k1.k2.k3' setmapx MAPX
strmap
convert nested map to multiline string
STR=: strmap MAPX
strmapc
convert compact string to nested map
MAPX=: strmapc CSTR
Compact string representation of a nested map is an extension
of multiline string (strmap), except it allows multiple keys per line.
Each line of compact string consists of
stem .tail1 value1 .tail2 value2 ...
stem: first non-space chars,
forms beggining of the key
tailI: non-space chars preceded with ' .'
forms end of key
valueI: value of the key
Both stem and tails may contain multiple parts of the key,
separated with '.', but it's important that tails always
begin with a '.'
strmapx
convert multiline string to nested map
MAPX=: strmapx STR
|