Maps in Lua
To create an empty table, you can use {}.
m = {}Set key/value pairs using typical table[key] = val syntax.
m["k1"] = 7
m["k2"] = 13Printing a table with print will not show all of its key/value pairs well. We’ll use a loop for that.
for k, v in pairs(m) do
print(k, v)
endGet a value for a key with table[key].
v1 = m["k1"]
print("v1:", v1)If the key doesn’t exist, nil is returned, which can be used to check the presence of a key.
v3 = m["k3"]
print("v3:", v3)The # operator returns the number of key/value pairs when called on an array (not a generic table). Instead, you can count the pairs manually.
length = 0
for _ in pairs(m) do
length = length + 1
end
print("len:", length)To remove key/value pairs from a table, set its value to nil.
m["k2"] = nil
for k, v in pairs(m) do
print(k, v)
endTo clear all key/value pairs from a table, you can iterate over it and set all values to nil.
for k in pairs(m) do
m[k] = nil
end
for k, v in pairs(m) do
print(k, v)
endYou can also declare and initialize a new table with some values in the same line.
n = {foo = 1, bar = 2}
for k, v in pairs(n) do
print(k, v)
endIf you need to check if two tables are equal, you would typically write a custom function to compare their contents.
function tablesEqual(t1, t2)
for k, v in pairs(t1) do
if t2[k] ~= v then
return false
end
end
for k, v in pairs(t2) do
if t1[k] ~= v then
return false
end
end
return true
end
n2 = {foo = 1, bar = 2}
if tablesEqual(n, n2) then
print("n == n2")
endNote that tables appear in the form {k = v, k = v} when printed with print.
$ lua maps.lua
k1 7
k2 13
v1: 7
v3: nil
len: 2
k1 7
<empty>
bar 2
foo 1
n == n2