216216 end
217217end
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 )
232236end
233237
234238--[[
@@ -470,20 +474,15 @@ function ModUtil.Table.Replace( target, data )
470474 end
471475end
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
485483end
486484
485+
487486function ModUtil .String .Join ( sep , ... )
488487 return table .rawconcat ( table.pack ( ... ), sep )
489488end
@@ -957,6 +956,18 @@ function ModUtil.Table.Merge( inTable, setTable )
957956 return inTable
958957end
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