From c2a0484005d2e574830fec4245cee1ea9cce82c9 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 14 Sep 2020 11:37:14 +0100 Subject: [PATCH] [Minor] Add deepsort utility --- lualib/lua_util.lua | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua index 6b42dbc5d..7c925c12b 100644 --- a/lualib/lua_util.lua +++ b/lualib/lua_util.lua @@ -982,7 +982,9 @@ local function deepcopy(orig) for orig_key, orig_value in next, orig, nil do copy[deepcopy(orig_key)] = deepcopy(orig_value) end - setmetatable(copy, deepcopy(getmetatable(orig))) + if getmetatable(orig) then + setmetatable(copy, deepcopy(getmetatable(orig))) + end else -- number, string, boolean, etc copy = orig end @@ -991,6 +993,25 @@ end exports.deepcopy = deepcopy +--[[[ +-- @function lua_util.deepsort(table) +-- params: { +- - table +-- } +-- Performs recursive in-place sort of a table +--]] +local function deepsort(tbl, sort_func) + local orig_type = type(tbl) + if orig_type == 'table' then + table.sort(tbl, sort_func) + for _, orig_value in next, tbl, nil do + deepsort(orig_value) + end + end +end + +exports.deepsort = deepsort + --[[[ -- @function lua_util.shallowcopy(tbl) -- Performs shallow (and fast) copy of a table or another Lua type -- 2.39.5