Skip to content

Commit d1e9b33

Browse files
new MergeKeyed + fix table.concat
1 parent 09d2715 commit d1e9b33

File tree

1 file changed

+33
-22
lines changed

1 file changed

+33
-22
lines changed

ModUtil.lua

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -216,19 +216,23 @@ do
216216
end
217217
end
218218

219-
table.rawconcat = table.concat
220-
local rawconcat = table.rawconcat
219+
local rawconcat = table.concat
220+
table.rawconcat = rawconcat
221221
-- table.concat that respects metamethods and includes more values
222-
function table.concat( table, sep, i, j )
223-
i = i or 1
224-
j = j or table.n or #table
225-
if i > j then return "" end
226-
sep = sep or ""
227-
local t = { }
228-
for k = i, j, 1 do
229-
t[ k ] = tostring( table[ k ] )
222+
do
223+
local wt = setmetatable( { }, { __mode = 'v' } )
224+
function table.concat( tbl, sep, i, j )
225+
i = i or 1
226+
j = j or tbl.n or #tbl
227+
if i > j then return "" end
228+
sep = sep or ""
229+
local t = rawnext( wt ) or { }
230+
rawset( wt, 1, t )
231+
for k = i, j, 1 do
232+
rawset( t, k, tostring( tbl[ k ] ) )
233+
end
234+
return rawconcat( t, sep, i, j )
230235
end
231-
return rawconcat( t, sep )
232236
end
233237

234238
--[[
@@ -470,20 +474,15 @@ function ModUtil.Table.Replace( target, data )
470474
end
471475
end
472476

473-
function ModUtil.Table.UnKeyed( tableArg )
474-
local lk = 0
475-
for k in pairs( tableArg ) do
476-
if type( k ) ~= "number" then
477-
return false
478-
end
479-
if lk + 1 ~= k then
480-
return false
481-
end
482-
lk = k
477+
function ModUtil.Table.UnKeyed( tbl )
478+
local n = #tbl
479+
for k in pairs( tbl ) do
480+
if type( k ) ~= "number" or k > n or k < 1 or k ~= math.floor(k) then return false end
483481
end
484482
return true
485483
end
486484

485+
487486
function ModUtil.String.Join( sep, ... )
488487
return table.rawconcat( table.pack( ... ), sep )
489488
end
@@ -957,6 +956,18 @@ function ModUtil.Table.Merge( inTable, setTable )
957956
return inTable
958957
end
959958

959+
function ModUtil.Table.MergeKeyed( inTable, setTable )
960+
for setKey, setVal in pairs( setTable ) do
961+
local inVal = inTable[ setKey ]
962+
if type( setVal ) == "table" and type( inVal ) == "table" and not ModUtil.Table.UnKeyed( setVal ) then
963+
ModUtil.Table.MergeKeyed( inVal, setVal )
964+
else
965+
inTable[ setKey ] = setVal
966+
end
967+
end
968+
return inTable
969+
end
970+
960971
-- Index Array Manipulation
961972

962973
--[[
@@ -2433,4 +2444,4 @@ end
24332444

24342445
-- Final Actions
24352446

2436-
replaceGlobalEnvironment( )
2447+
replaceGlobalEnvironment( )

0 commit comments

Comments
 (0)