From c8096225a92a70cc1e96e1d8ee605b3427ec2cbf Mon Sep 17 00:00:00 2001 From: Max Witt Date: Tue, 13 Sep 2022 19:08:46 +0200 Subject: [PATCH] Add library of table manipulation functions --- lib/table.lua | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ list.json | 2 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 lib/table.lua diff --git a/lib/table.lua b/lib/table.lua new file mode 100644 index 0000000..f47e11d --- /dev/null +++ b/lib/table.lua @@ -0,0 +1,50 @@ +--1 +local function filter(tbl, f) + if tbl == nil then return nil end + if f == nil then return {} end + local t = {} + for k,v in pairs(tbl) do + if f(v,k,tbl) then t[#t+1] = v end + end + return t +end +local function find(tbl, f) + if tbl == nil then return nil end + if f == nil then return nil end + for k,v in pairs(tbl) do + if f(v,k,tbl) then return v, k end + end + return nil +end +local function map(tbl, f) + if tbl == nil then return nil end + if f == nil then return tbl end + local t = {} + for k,v in pairs(tbl) do + t[k] = f(v,k,tbl) + end + return t +end +local function reduce(tbl, f, initial) + if tbl == nil then return nil end + if f == nil then return tbl end + local result + local startIndex = 1 + if initial then + result = initial + else + result = tbl[1] + startIndex = 2 + end + for i = startIndex,#tbl do + result = f(result, tbl[i], i, tbl) + end + return result +end + +return { + filter = filter, + find = find, + map = map, + reduce = reduce +} \ No newline at end of file diff --git a/list.json b/list.json index 0defa68..93356e1 100644 --- a/list.json +++ b/list.json @@ -1 +1 @@ -[{"name":"batmon.lua","version":4},{"name":"config-loader.lua","version":1},{"name":"door.lua","version":1},{"name":"installer.lua","version":9},{"name":"place-item.lua","version":3},{"name":"reactorcontrol.lua","version":5},{"name":"seq-client.lua","version":1},{"name":"signal-slider.lua","version":4},{"name":"turbinecontrol.lua","version":16},{"name":"websocket.lua","version":12}] \ No newline at end of file +[{"name":"batmon.lua","version":4},{"name":"config-loader.lua","version":1},{"name":"door.lua","version":1},{"name":"installer.lua","version":9},{"name":"lib/table.lua","version":1},{"name":"place-item.lua","version":3},{"name":"reactorcontrol.lua","version":5},{"name":"seq-client.lua","version":1},{"name":"signal-slider.lua","version":4},{"name":"turbinecontrol.lua","version":16},{"name":"websocket.lua","version":12}] \ No newline at end of file