- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
Module:Array
来自Minecraft基岩版开发Wiki
此模块可将一个Lua table或一个字符串按给定的分隔符输出语言自然的列表。
local p = {}
local f = mw.getCurrentFrame()
local function getTagExtension(tag, style)
if tag ~= '' then
if style ~= '' then
local args = { style = style }
return function (value)
return f:extensionTag(tag, value, args)
end
end
return function (value)
return f:extensionTag(tag, value)
end
end
return function (value)
return value
end
end
local function stringToArray(str, separator, wrapTag, wrapTagStyle, keepBlank)
local arr = {}
local i = 1
local extension = getTagExtension(wrapTag, wrapTagStyle)
for v in mw.text.gsplit(str, separator) do
if v ~= '' or keepBlank then
arr[i] = extension(v)
end
i = i + 1
end
return arr
end
local function tableToArray(tbl, wrapTag, wrapTagStyle, keepBlank, sort)
local arr = {}
local extension = getTagExtension(wrapTag, wrapTagStyle)
for k, v in pairs(tbl) do
if type(k) == 'number' and (v ~= '' or keepBlank) then
arr[k] = extension(v)
end
end
if sort 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 wrapTagStyle = args.style or ''
local sort = require('Module:Yesno')(args.sort)
local delimiter = args.delimiter or args.d or ''
local keepBlank = args.keepblank
local arr
if args.mode == 'single' then
arr = stringToArray(args[1], args.sep or ',', wrapTag, wrapTagStyle, keepBlank)
else
arr = tableToArray(args, wrapTag, wrapTagStyle, keepBlank, sort)
end
if delimiter == 'pretty' or delimiter == 'pretty-and' then
return mw.text.listToText(arr)
elseif delimiter == 'pretty-or' then
return mw.text.listToText(arr, '、', '或')
elseif delimiter == 'newline' or delimiter == 'br' then
return table.concat(arr, '<br>')
elseif delimiter == 'list' or delimiter == 'list-newline'
or delimiter == 'bullet' or delimiter == '*' then
local listLevel = args['list-level'] or '**'
return table.concat(arr, '\n' .. listLevel)
else
return table.concat(arr, delimiter)
end
end
return p