[checked revision] | [checked revision] |
((via Mediawiker ST3)) |
((via Mediawiker ST3)) |
||
Line 87: | Line 87: | ||
function p.splitAndConcat(str, sep, f, sep2) |
function p.splitAndConcat(str, sep, f, sep2) |
||
− | if not str then return nil end |
+ | if not str or str == '' then return nil end |
if not sep2 then sep2 = '' end |
if not sep2 then sep2 = '' end |
||
local tbl = p.split(str, sep, f) |
local tbl = p.split(str, sep, f) |
Revision as of 19:45, 24 October 2019
Edit the documentation or categories for this module.
local util_table = require("Module:TableUtil")
local util_text = require("Module:TextUtil")
local h = {}
local p = {}
function p.inPlace(tbl, f, ...)
for k, v in pairs(tbl) do
tbl[k] = f(v, ...)
end
return tbl
end
function p.arrayInPlace(tbl, f, ...)
for k, v in ipairs(tbl) do
tbl[k] = f(v, ...)
end
return tbl
end
function p.arrayInPlaceAndMerge(tbl, f, ...)
-- assumes f returns table values
return util_table.mergeArrays(unpack(p.arrayInPlace(tbl, f, ...)))
end
function p.arraySafe(tbl, f, ...)
local tbl2 = {}
for k, v in ipairs(tbl) do
tbl2[k] = f(v, ...)
end
return tbl2
end
function p.safe(tbl, f, ...)
local tbl2 = mw.clone(tbl)
util_table.removeFalseEntries(tbl2)
for k, v in pairs(tbl2) do
tbl2[k] = f(v, ...)
end
return tbl2
end
function p.dictSafe(tbl, f, ...)
local tbl2 = mw.clone(tbl)
for _, v in ipairs(tbl2) do
tbl2[v] = f(tbl2[v], ...)
end
return tbl2
end
function p.dictInPlace(tbl, f, ...)
for _, v in ipairs(tbl) do
tbl[v] = f(tbl[v], ...)
end
return tbl
end
function p.rowsInPlace(tbl, f, ...)
for k, row in ipairs(tbl) do
f(row, ...)
row.index = k
end
return tbl
end
function p.dictRowsInPlace(tbl, f, ...)
for _, v in ipairs(tbl) do
f(tbl[v], ...)
end
return tbl
end
function p.arrayToLookupSafe(tbl, f, ...)
local tbl2 = {}
for _, v in ipairs(tbl) do
tbl2[v] = f(v, ...)
end
return tbl2
end
function p.split(str, sep, f, ...)
local tbl = util_text.split(str,sep)
if not f then return tbl end
return p.inPlace(tbl, f, ...)
end
function p.splitAndConcat(str, sep, f, sep2)
if not str or str == '' then return nil end
if not sep2 then sep2 = '' end
local tbl = p.split(str, sep, f)
return table.concat(tbl, sep2)
end
function p.extractField(tbl, field)
local tbl2 = {}
for _, row in ipairs(tbl) do
tbl2[#tbl2+1] = row[field]
end
return tbl2
end
function p.formatAndConcat(tbl, sep, str)
if not tbl then return nil end
if not next(tbl) then return nil end
return util_table.concat(tbl, sep, h.format, str)
end
function h.format(sub, str)
return str:format(sub)
end
return p