欢迎来到奇葩栖息地!欢迎加入Discord服务器:XfrfHCzfbW欢迎加入QQ频道:r01m9y3iz6请先至特殊:参数设置验证邮箱后再进行编辑。特殊:参数设置挑选自己想要使用的小工具!不会编辑?请至这里学习Wikitext语法。

模块:Array

来自奇葩栖息地
SkyEye FAST讨论 | 贡献2023年9月30日 (六) 14:40的版本 (//Edit via InPageEdit)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
此模块及其文档搬运自中文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