Maps in Scilab
Maps are Scilab’s built-in associative data type (sometimes called hashes or dicts in other languages).
To create an empty map, use the mlist function.
m = mlist(['keys', 'vals'], [], []);Set key/value pairs using typical name(key) = val syntax.
m.keys($ + 1) = 'k1';
m.vals($ + 1) = 7;
m.keys($ + 1) = 'k2';
m.vals($ + 1) = 13;Printing a map with disp will show all of its key/value pairs.
disp(m);Get a value for a key with its index.
index = find(m.keys == 'k1');
v1 = m.vals(index);
disp('v1: ' + string(v1));If the key doesn’t exist, the zero value (e.g., 0 for integers) of the value type is returned.
index = find(m.keys == 'k3');
if isempty(index) then
v3 = 0;
else
v3 = m.vals(index);
end
disp('v3: ' + string(v3));The size function returns the number of key/value pairs when called on a map.
len = length(m.keys);
disp('len: ' + string(len));To remove key/value pairs from a map, use appropriate indexing.
index = find(m.keys == 'k2');
m.keys(index) = [];
m.vals(index) = [];
disp(m);To remove all key/value pairs from a map, simply clear the lists.
m.keys = [];
m.vals = [];
disp(m);The second return value when getting a value from a map indicates if the key was present in the map.
index = find(m.keys == 'k2');
prs = ~isempty(index);
disp('prs: ' + string(prs));You can also declare and initialize a new map in the same line with this syntax.
n = mlist(['keys', 'vals'], ['foo', 'bar'], [1, 2]);
disp(n);Note that maps appear in the form [keys:values] when printed with disp.
if equals(n.vals, [1, 2]) then
disp('n == n2');
end--> disp(m)
keys: ["k1" "k2"]
vals: [7 13]
--> disp('v1: ' + string(v1))
v1: 7
--> disp('v3: ' + string(v3))
v3: 0
--> disp('len: ' + string(len))
len: 2
--> disp(m)
keys: ["k1"]
vals: [7]
--> disp(m)
keys: []
vals: []
--> disp('prs: ' + string(prs))
prs: F
--> disp(n)
keys: ["foo" "bar"]
vals: [1 2]
--> disp('n == n2')
n == n2