Map

The Map: module provides a string-keyed dictionary. All methods follow the ByRef convention.


Call Effect
Map:New name Create an empty map
Map:Set(key, val, name) Insert or overwrite a key
Map:Get(key, name, outVar) Read value → outVar (0 if key absent)
Map:Has(key, name, outVar) true if key exists → outVar
Map:Remove(key, name) Delete a key
Map:Size(name, outVar) Number of entries → outVar
Map:Keys(name, listName) Populate a pre-declared List:String with all keys (order unspecified)
Map:Clear(name) Remove all entries
Map:SetList(key, listName, name) Store a copy of listName under key
Map:GetList(key, name, listName) Retrieve list stored at key into listName
Map:SetMap(key, innerName, name) Store a copy of map innerName under key
Map:GetMap(key, name, innerName) Retrieve inner map at key into innerName
Map:New scores;
Map:Set("Alice", 95, scores);
Map:Set("Bob", 82, scores);

Var:Number val;
Map:Get("Alice", scores, val);
Konsol:Print(val);          // 95

Var:Boolean found;
Map:Has("Carol", scores, found);
Konsol:Print(found);        // false

Var:Number sz;
Map:Size(scores, sz);
Konsol:Print(sz);           // 2

List:String keys;
Map:Keys(scores, keys);
List:Size(keys, sz);
Konsol:Print(sz);           // 2

// Map of lists
List:Number nums;
List:Push(1, nums);
List:Push(2, nums);
Map:SetList("evens", nums, scores);

List:Number retrieved;
Map:GetList("evens", scores, retrieved);

Examples

// 24_map.ks — Map module (string-keyed dictionary)

Var:Number sz;
Var:Boolean found;
Var:Number numVal;
Var:String strVal;

Konsol:Print("=== set / get ===");
Map:New scores;
Map:Set("Alice", 95, scores);
Map:Set("Bob", 82, scores);
Map:Set("Carol", 77, scores);
Map:Get("Alice", scores, numVal);
Konsol:Print(numVal);       // 95
Map:Get("Bob", scores, numVal);
Konsol:Print(numVal);       // 82

Konsol:Print("=== has ===");
Map:Has("Carol", scores, found);
Konsol:Print(found);       // true
Map:Has("Dave", scores, found);
Konsol:Print(found);       // false

Konsol:Print("=== size ===");
Map:Size(scores, sz);
Konsol:Print(sz);          // 3

Konsol:Print("=== overwrite ===");
Map:Set("Bob", 90, scores);
Map:Get("Bob", scores, numVal);
Konsol:Print(numVal);      // 90

Konsol:Print("=== remove ===");
Map:Remove("Carol", scores);
Map:Has("Carol", scores, found);
Konsol:Print(found);       // false
Map:Size(scores, sz);
Konsol:Print(sz);          // 2

Konsol:Print("=== missing key returns 0 ===");
Map:Get("nobody", scores, numVal);
Konsol:Print(numVal);      // 0

Konsol:Print("=== string values ===");
Map:New capitals;
Map:Set("France", "Paris", capitals);
Map:Set("Japan", "Tokyo", capitals);
Map:Set("Egypt", "Cairo", capitals);
Map:Get("Japan", capitals, strVal);
Konsol:Print(strVal);      // Tokyo

Konsol:Print("=== keys ===");
Map:New small;
Map:Set("x", 1, small);
Map:Set("y", 2, small);
List:String keyList;
Map:Keys(small, keyList);
List:Size(keyList, sz);
Konsol:Print(sz);          // 2

Konsol:Print("=== clear ===");
Map:Clear(small);
Map:Size(small, sz);
Konsol:Print(sz);          // 0