Closed juancarlospaco closed 3 years ago
Name: Dik
Author: Juan Carlos
Posting:
Dik is a dictionary implemented as { array[char]: Option[T] }
{ array[char]: Option[T] }
pretty
toSeq
toDik
Table
newDikOfCap
array
char
seq
Option[T]
len
cap
string
openArray[char]
BackwardsIndex
Slice[int]
enumerated
(index, key, value)
options
hashes
hash(T)
import std/options ## For Option[T] ops. import std/json ## For heterogeneous values. import dik var myDik = {"key0": %*{"foo": 42, "bar": 3.14}, "key1": %*["baz", true]}.toDik doAssert myDik.len == 2 # Length doAssert myDik.cap == 2 # Capacity doAssert sizeOf(myDik) == 32 doAssert myDik[1].get == %*["baz", true] # Get by index doAssert myDik[^1].get == %*["baz", true] # Get by BackwardsIndex doAssert myDik["key1"].get == %*["baz", true] # Get by key doAssert myDik[1..1][0].get == %*["baz", true] # Get by Slice[int] echo myDik.pretty # Pretty-print doAssert myDik.toSeq is seq[Option[JsonNode]] # Dik to seq doAssert "key0" in myDik # contains(key) myDik.del "key1" # Delete an item for (index, key, value) in myDik.enumerated: # Iterators doAssert index == 0 doAssert key == "key0" doAssert value.get == %*{"foo": 42, "bar": 3.14} # Can store the lack of a value, without using "nil". myDik["key1"] = none JsonNode doAssert not(myDik[1].isSome) doAssert myDik[1] == myDik["key1"] clear myDik doAssert myDik.len == 0 doAssert $myDik == "{:}"
interesting, but what's the actual difference vs tables?
A major benefit is it encourage him to write doAssert sizeOf(myDik) == 32 so atleast 10 points for comedy
doAssert sizeOf(myDik) == 32
Name: Dik
Author: Juan Carlos
Posting:
Dik is a dictionary implemented as
{ array[char]: Option[T] }
pretty
.toSeq
andtoDik
.Table
.newDikOfCap
for custom capacity.array
ofchar
.seq
ofOption[T]
.seq
or likeTable
.len
for lenght andcap
for capacity.string
oropenArray[char]
.BackwardsIndex
orSlice[int]
.enumerated
yields(index, key, value)
.options
forOption[T]
,hashes
forhash(T)
.