欢迎来到奇葩栖息地!欢迎加入Discord服务器:XfrfHCzfbW。请先至特殊:参数设置验证邮箱后再进行编辑。在特殊:参数设置挑选自己想要使用的小工具!不会编辑?请至这里学习Wikitext语法。
模块:Array
来自奇葩栖息地
此模块及其文档搬运自中文Minecraft Wiki页面Module:Array。
引入时,来源页面的修订版本为707622,其文档页的修订版本为613396。
这些内容依据CC BY-NC-SA 3.0协议引入。原贡献者请参见原页面的历史。
经过双方编者的修改,这些内容与来源可能存在差异。
这些内容需要定期更新,以与来源保持同步。
此模块可将一个Lua table或一个字符串按给定的分隔符输出语言自然的列表。
local p = {}
local f = mw.getCurrentFrame()
local function stringToArray(str, separator, wrapTag, keepBlank, requireSort)
local arr = {}
local i = 1
for v in mw.text.gsplit(str, separator) do
if v ~= '' or keepBlank then
if wrapTag ~= '' then
arr[i] = f:extensionTag(wrapTag, v)
else
arr[i] = v
end
end
i = i + 1
end
if requireSort then
table.sort(arr)
end
return arr
end
local function tableToArray(tbl, wrapTag, keepBlank, requireSort)
local arr = {}
for k, v in pairs(tbl) do
if type(k) == 'number' and (v ~= '' or keepBlank) then
if wrapTag ~= '' then
arr[k] = f:extensionTag(wrapTag, v)
else
arr[k] = v
end
end
end
if requireSort then
table.sort(arr)
end
return arr
end
function p.main()
local args = require('Module:ProcessArgs').merge(true)
return p.array(args)
end
function p.array(args)
local wrapTag = args.wrap or ''
local delimiter = args.delimiter or args.d or ''
local keepBlank = args.keepblank
local requireSort = args.sort
local outputPrefix = args.prefix or ''
local outputSuffix = args.suffix or ''
local arr
if args.mode == 'single' then
arr = stringToArray(args[1], args.sep or ',', wrapTag, keepBlank, requireSort)
else
arr = tableToArray(args, wrapTag, keepBlank, requireSort)
end
local result
if delimiter == 'pretty' then
result = mw.text.listToText(arr)
elseif delimiter == 'newline' or delimiter == 'br' then
result = table.concat(arr, '<br>')
elseif delimiter == 'list' or delimiter == 'list-newline'
or delimiter == 'bullet' or delimiter == '*' then
local listLevel = args['list-level'] or '**'
result = table.concat(arr, '\n' .. listLevel)
else
result = table.concat(arr, delimiter)
end
return outputPrefix .. result .. outputSuffix
end
return p