Ordered Table
Lua’s table types which are not numerically-indexed don’t define an order for their keys. Iterating
through them using pairs() will provide the entries in an undefined order. A common wy around
this to preserve the order of key-value tables is also insert the keys into the table as a list and
then iterate over keys of table using ipairs() (and then looking up the value). The
OrderedTable provides a set of helper functions to make this more ergonamic.
Example
Below is an example which demonstrates how to use the OrderedTable APIs.
local MyModule = select(2, ...).MyModule
local OrderedTable = MyModule:From("LibTSMUtil"):Include("BaseType.OrderedTable")
local tbl = {}
OrderedTable.Insert(tbl, "b", 2)
OrderedTable.Insert(tbl, "a", 3)
for _, k, v in OrderedTable.Iterator(tbl) do
print(k, v)
end
-- b 2
-- a 3
OrderedTable.SortByKeys(tbl)
for _, k, v in OrderedTable.Iterator(tbl) do
print(k, v)
end
-- a 3
-- b 2
API
-
class BaseType.OrderedTable:
LibTSMModule -
staticmethod GetByIndex(tbl:
OrderedTable.Table<<K>, <V>>, index:number): <K>, <V> Gets a value from an ordered table by index.
-
staticmethod Insert(
tbl:OrderedTable.Table<<K>, <V>>,
key: <K>,
value: <V>
) Inserts into an ordered table.
- Parameters:
tbl (
OrderedTable.Table<<K>, <V>>) – The ordered tablekey (<
K>) – The key to insertvalue (<
V>) – The value to insert
-
staticmethod InsertIfNotSet(
tbl:OrderedTable.Table<<K>, <V>>,
key: <K>,
value: <V>
) Inserts into an ordered table if the key wasn’t previously set.
- Parameters:
tbl (
OrderedTable.Table<<K>, <V>>) – The ordered tablekey (<
K>) – The key to insertvalue (<
V>) – The value to insert
-
staticmethod Remove(tbl:
OrderedTable.Table<<K>, <V>>, key: <K>) Removes from an ordered table.
- Parameters:
tbl (
OrderedTable.Table<<K>, <V>>) – The ordered tablekey (<
K>) – The key to remove
-
staticmethod SortByKeys(tbl:
OrderedTable.Table<<K>, <V>>) Sorts the ordered table by its keys
- Parameters:
tbl (
OrderedTable.Table<<K>, <V>>) – The ordered table
-
staticmethod SortByValues(tbl:
OrderedTable.Table<<K>, <V>>) Sorts the ordered table by its values
- Parameters:
tbl (
OrderedTable.Table<<K>, <V>>) – The ordered table
-
staticmethod Iterator(tbl:
OrderedTable.Table<<K>, <V>>): (
fun():number, <K>, <V>,
OrderedTable.Table<<K>, <V>>
) Iterates over an ordered table.
- Parameters:
tbl (
OrderedTable.Table<<K>, <V>>) – The ordered table- Returns:
_1 (fun():
number, <K>, <V>) – Iterator with fields: index, key, value
-
staticmethod KeyIterator(tbl:
OrderedTable.Table<<K>, <V>>): fun():number, <K>,OrderedTable.Table<<K>, <V>> Iterates over the keys of an ordered table.
- Parameters:
tbl (
OrderedTable.Table<<K>, <V>>) – The ordered table- Returns:
_1 (fun():
number, <K>) – Iterator with fields: key
-
staticmethod ConcatKeys(tbl:
OrderedTable.Table<<K>, <V>>, sep:string):string Concatenate the keys into a string.
- Parameters:
sep (
string) – The separator string
-
staticmethod GetByIndex(tbl: