- Up - | Next >> |
Dictionaries are supported directely by the Oz base library. They are implemented by hash tables that can be extended dynamically. The type of dictionary keys is
type key = (atom + int)
Given this type, we can now define the type of a dictionary object:
unit(toRecord : -> record
isEmpty : -> bool
entries : -> list(key#value)
items : -> list(value)
put : key x value ->
get : key -> value
condGet : key x value -> value
member : key -> bool
toKeys : -> list(key)
remove : key ->
removeAll: ->
collect : key x value ->
...)
A dictionary is created using NewDictionary
. You can add new features using the :=
operator.
declare D={NewDictionary}
D.foo := baz
D.hello := world
D.42 := fourtytwo
Now the dictionary contains the 3 features foo
, hello
and 42
. You can look up the value associated with a feature using the dot notation and modify their association using :=
operator. The statement {CondSelect D Feature Default}
performs a lookup of Feature
in D
much like the dot operation, but, if the Feature
does not exist, it returns a Default
instead. It is possible to check whether a feature exists using HasFeature
:
{Inspect D.hello}
D.hello := universe(D)
{Inspect {CondSelect D foo fooNotFound}}
{Inspect {CondSelect D baz bazNotFound}}
{Inspect {HasFeature D foo}}
{Inspect {HasFeature D baz}}
The procedure CondSelect
and HasFeature
also work on records and arrays. You can find what features, items (i. e. values) , and entries (feature/item pairs) are in D
using respectively:
{Dictionary.keys D} ==> [hello 42 foo]
{Dictionary.items D} ==> [universe(D) fourtytwo baz]
{Dictionary.entries D} ==> [hello#universe(D) 42#fourtytwo foo#baz]
A feature can be deleted using Dictionary.remove
:
{Dictionary.remove D foo}
- Up - | Next >> |