https://github.com/Pascal-J/kv/blob/main/kv.ijs

follows closely to spec I proposed earlier this week.


intended for coinsert 'kv' into any other locale. (should be) safe for 
coinsert_z_ 'kv' (base needs extra coinsert 'z' call)

unique key implied access even when non-unique keys permitted.

create(bulk), add, del, update/set all have versions to allow/avoid duplicates. 
1 suffix permits duplicates

optimized for bulk operations, where arguments to functions are either a list 
of keys, or a kv dictionary.

kv dictionary always y argument. modifications return copies.

A DSL is provided to permit one line string descriptions of the simplest 
dictionaries.

Non-unique key implementation can still provide unique key expected behaviour. 
add appending a duplicate value creates an undo operation when del deletes the 
last value.

kvadd1 instead of kvadd

Multiple internal keys also permit using kv with meaningful order and /.(key) 
"applications" and classifiers.

tosym replacement for s: cut instead of leading delimiter. tosym on symbols 
returns the symbols instead of error.

values kept native numeric or string (padded) if possible. Otherwise boxed.

values can hold other kv structures, and so may wish to hold 3 independent 
dictionaries for each data type: numeric, string, boxed.

kv (get) function returns values only for keys found, returns i.0 if no keys 
found.

adding or updating unboxed values will promote to boxed if internal values are 
boxed.

deep operations are supported, where typical kv right arguments (set add) will 
when provided with nested k1;(kv) :

will modify kv deeply with (k0 kvbulk (keys;vals) set kvdata will set at k0 
level.

get/del can access/del at infinte depth.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to