This discussion is important. I'd like to continue from this post.
To respond to Ian, who asked Who really needs this anyway? I say that I
got great use from C++ classes for ordered_map and unordered_map. The
operations can be done in J, but the speed advantage of hashing for
lookups is so significant as to make the difference between tolerable
and intolerable performance.
I would change the definition to:
A Dictionary is a collection of key/value pairs, where the keys and
values can have any type and shape. Keys are not necessarily unique.
Keys and values may be given as unboxed but they will be boxed
immediately before going into the Dictionary.
Supported operations:
Dic =: ~. Dic discard kvs for duplicate keys
Dic =: Dic , k,v add a KV
k { Dic read value[s]
Dic =: v k} Dic replace kv
k e. Dic How many times does key exist?
{."1 Dic list of all keys
{:"1 Dic list of all values
?? delete key
Rob: what needs to be added to make the dictionary type as useful as it
is in K?
Henry Rich
To answer Henry's questions:
My definition of a dictionary is:
A collection where data is organized by key, where keys can be symbols,
strings, or numbers (or possibly other data types) and values can be
arbitrary J data.
Essential dictionary operations are:
- create/read/update/delete by key
- query if key exists
- enumerate all keys (returns an array of boxed keys)
- enumerate all values (returns an array of boxed values)
- merge two dictionaries e.g. (Z=: X merge Y) and if X and Y share any key,
then Z gets the key/value pair from Y
Nice features to have, but not necessary:
- keys are stored in J's sorting order
- dictionaries can be serialized/deserialized for persistent disk storage
or for sending to other processes
--
This email has been checked for viruses by AVG.
https://www.avg.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm