Associative mapping combinators
Factor handbook » The language » Collections » Associative mapping operations

Prev:Storing keys and values in assocs
Next:Set-theoretic operations on assocs


The following combinators can be used on any associative mapping.

The standard functional programming idioms:
assoc-each ( ... assoc quot: ( ... key value -- ... ) -- ... )

assoc-find ( ... assoc quot: ( ... key value -- ... ? ) -- ... key value ? )

assoc-map ( ... assoc quot: ( ... key value -- ... newkey newvalue ) -- ... newassoc )

assoc-map-as ( ... assoc quot: ( ... key value -- ... newkey newvalue ) exemplar -- ... newassoc )

assoc-filter ( ... assoc quot: ( ... key value -- ... ? ) -- ... subassoc )

assoc-filter-as ( ... assoc quot: ( ... key value -- ... ? ) exemplar -- ... subassoc )

assoc-reject ( ... assoc quot: ( ... key value -- ... ? ) -- ... subassoc )

assoc-reject-as ( ... assoc quot: ( ... key value -- ... ? ) exemplar -- ... subassoc )

assoc-partition ( ... assoc quot: ( ... key value -- ... ? ) -- ... true-assoc false-assoc )

assoc-any? ( ... assoc quot: ( ... key value -- ... ? ) -- ... ? )

assoc-all? ( ... assoc quot: ( ... key value -- ... ? ) -- ... ? )


Removing empty keys or values:
sift-keys ( assoc -- assoc' )

sift-values ( assoc -- assoc' )

harvest-keys ( assoc -- assoc' )

harvest-values ( assoc -- assoc' )


Mapping between assocs and sequences:
map>assoc ( ... seq quot: ( ... elt -- ... key value ) exemplar -- ... assoc )

map>alist ( ... seq quot: ( ... elt -- ... key value ) -- ... alist )

assoc>map ( ... assoc quot: ( ... key value -- ... elt ) exemplar -- ... seq )


Destructive combinators:
assoc-filter! ( ... assoc quot: ( ... key value -- ... ? ) -- ... assoc )

assoc-reject! ( ... assoc quot: ( ... key value -- ... ? ) -- ... assoc )

cache ( ... key assoc quot: ( ... key -- ... value ) -- ... value )

2cache ( ... key1 key2 assoc quot: ( ... key1 key2 -- ... value ) -- ... value )