<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.zombiepanicsource.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AArray</id>
	<title>Module:Array - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.zombiepanicsource.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AArray"/>
	<link rel="alternate" type="text/html" href="https://wiki.zombiepanicsource.com/index.php?title=Module:Array&amp;action=history"/>
	<updated>2026-05-14T14:04:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.zombiepanicsource.com/index.php?title=Module:Array&amp;diff=431&amp;oldid=prev</id>
		<title>Wuffesan: Created page with &quot;local p = {} local lib = require(&#039;Module:Feature&#039;)  function p.main(frame) 	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, { 		parentFirst = true, 		wrapper = { &#039;Template:Array&#039; } 	}) 	return p._main(args, frame) end  function p._main(args, frame) 	local arrayString = args[1] or args[&quot;arrayString&quot;] or nil 	local separator = args[2] or args[&quot;sep&quot;] or args[&quot;separator&quot;] or nil 	local format = args[3] or args[&quot;format&quot;] or &quot;{item}&quot; 	local join = args[4] or args[&quot;join...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.zombiepanicsource.com/index.php?title=Module:Array&amp;diff=431&amp;oldid=prev"/>
		<updated>2025-06-11T20:05:36Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {} local lib = require(&amp;#039;Module:Feature&amp;#039;)  function p.main(frame) 	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, { 		parentFirst = true, 		wrapper = { &amp;#039;Template:Array&amp;#039; } 	}) 	return p._main(args, frame) end  function p._main(args, frame) 	local arrayString = args[1] or args[&amp;quot;arrayString&amp;quot;] or nil 	local separator = args[2] or args[&amp;quot;sep&amp;quot;] or args[&amp;quot;separator&amp;quot;] or nil 	local format = args[3] or args[&amp;quot;format&amp;quot;] or &amp;quot;{item}&amp;quot; 	local join = args[4] or args[&amp;quot;join...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local lib = require(&amp;#039;Module:Feature&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
		parentFirst = true,&lt;br /&gt;
		wrapper = { &amp;#039;Template:Array&amp;#039; }&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, frame)&lt;br /&gt;
	local arrayString = args[1] or args[&amp;quot;arrayString&amp;quot;] or nil&lt;br /&gt;
	local separator = args[2] or args[&amp;quot;sep&amp;quot;] or args[&amp;quot;separator&amp;quot;] or nil&lt;br /&gt;
	local format = args[3] or args[&amp;quot;format&amp;quot;] or &amp;quot;{item}&amp;quot;&lt;br /&gt;
	local join = args[4] or args[&amp;quot;join&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
	local dedupe = args[&amp;quot;dedupe&amp;quot;] or nil&lt;br /&gt;
	local sort = args[&amp;quot;sort&amp;quot;] or nil&lt;br /&gt;
	local sentence = args[&amp;quot;sentence&amp;quot;] or nil&lt;br /&gt;
	local sentence_last = args[&amp;#039;sentence_last&amp;#039;] or &amp;#039; and &amp;#039;&lt;br /&gt;
	local sentence_join = args[&amp;#039;sentence_join&amp;#039;] or &amp;#039;, &amp;#039;&lt;br /&gt;
	local firstItemOnly = args[&amp;quot;firstItemOnly&amp;quot;] or nil&lt;br /&gt;
	local offsetStart = args[&amp;quot;offsetStart&amp;quot;] or nil&lt;br /&gt;
	local offsetEnd = args[&amp;quot;offsetEnd&amp;quot;] or nil&lt;br /&gt;
	local prefix = args[&amp;#039;prefix&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local suffix = args[&amp;#039;suffix&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local template = args[&amp;#039;template&amp;#039;] or nil&lt;br /&gt;
	local split_opt = {&lt;br /&gt;
		removeEmpty = args[&amp;#039;removeEmpty&amp;#039;] or nil,&lt;br /&gt;
		noTrim = args[&amp;#039;noTrim&amp;#039;] or nil&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	-- argument validation&lt;br /&gt;
	if arrayString == nil then return &amp;quot;&amp;quot; end&lt;br /&gt;
	if separator == nil then return error(&amp;quot;Second argument (separator) must not be empty.&amp;quot;) end&lt;br /&gt;
	if separator == &amp;quot;&amp;quot; then return error(&amp;quot;Second argument (separator) must not be empty string.&amp;quot;) end&lt;br /&gt;
	if format == nil then return error(&amp;quot;Third argument (format) must not be empty.&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
	-- split string to array&lt;br /&gt;
	if string.find(separator, &amp;quot;{newline}&amp;quot;) then&lt;br /&gt;
		separator = separator:gsub(&amp;quot;{newline}&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if string.find(separator, &amp;quot;{space}&amp;quot;) then&lt;br /&gt;
		separator = separator:gsub(&amp;quot;{space}&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	local array = lib.split(arrayString, separator, split_opt)&lt;br /&gt;
&lt;br /&gt;
	-- remove duplicates from array&lt;br /&gt;
	if dedupe ~= nil then&lt;br /&gt;
		array = p._removeDuplicates(array)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- sort array&lt;br /&gt;
	if sort ~= nil then&lt;br /&gt;
		array = p._sort(array, sort)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- filter by offset&lt;br /&gt;
	if offsetStart ~= nil or offsetEnd ~= nil then&lt;br /&gt;
		array = lib.arraySlice(array, lib.toNullableNumber(offsetStart), lib.toNullableNumber(offsetEnd))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- replace keywords in array&lt;br /&gt;
	for key, value in pairs(array) do&lt;br /&gt;
		local item = format&lt;br /&gt;
		if args[&amp;quot;format&amp;quot; .. key] ~= nil then&lt;br /&gt;
			item = args[&amp;quot;format&amp;quot; .. key]&lt;br /&gt;
		end&lt;br /&gt;
		if string.find(item, &amp;quot;{item}&amp;quot;) then&lt;br /&gt;
			item = item:gsub(&amp;quot;{item}&amp;quot;, value)&lt;br /&gt;
		end&lt;br /&gt;
		if string.find(item, &amp;quot;{itemLink}&amp;quot;) then&lt;br /&gt;
			item = item:gsub(&amp;quot;{itemLink}&amp;quot;, mw.InfoboxBuilderHF.Link(value))&lt;br /&gt;
		end&lt;br /&gt;
		if string.find(item, &amp;quot;{itemLinkSafe}&amp;quot;) then&lt;br /&gt;
			item = item:gsub(&amp;quot;{itemLinkSafe}&amp;quot;, mw.InfoboxBuilderHF.Link_safe(value))&lt;br /&gt;
		end&lt;br /&gt;
		if string.find(item, &amp;quot;{index}&amp;quot;) then&lt;br /&gt;
			item = item:gsub(&amp;quot;{index}&amp;quot;, key)&lt;br /&gt;
		end&lt;br /&gt;
		if string.find(item, &amp;quot;{newline}&amp;quot;) then&lt;br /&gt;
			item = item:gsub(&amp;quot;{newline}&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		if string.find(item, &amp;quot;{space}&amp;quot;) then&lt;br /&gt;
			item = item:gsub(&amp;quot;{space}&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		array[key] = item&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- mw.logObject(array)&lt;br /&gt;
	&lt;br /&gt;
	-- create result array&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	-- join as sentence&lt;br /&gt;
	if sentence ~= nil then&lt;br /&gt;
		if #array == 0 then return &amp;quot;&amp;quot;&lt;br /&gt;
		elseif #array == 1 then return array[1]&lt;br /&gt;
		elseif #array == 2 then return array[1] .. sentence_last .. array[2]&lt;br /&gt;
		else&lt;br /&gt;
			local last = table.remove(array, #array)&lt;br /&gt;
			result = table.concat(array, sentence_join) .. sentence_join .. sentence_last .. last&lt;br /&gt;
		end&lt;br /&gt;
	-- first item only&lt;br /&gt;
	elseif firstItemOnly ~= nil then&lt;br /&gt;
		return array[1]&lt;br /&gt;
	-- join with join string&lt;br /&gt;
	else&lt;br /&gt;
		if string.find(join, &amp;quot;{newline}&amp;quot;) then&lt;br /&gt;
			join = join:gsub(&amp;quot;{newline}&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		if string.find(join, &amp;quot;{space}&amp;quot;) then&lt;br /&gt;
			join = join:gsub(&amp;quot;{space}&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		result = table.concat(array, join)&lt;br /&gt;
	end&lt;br /&gt;
	result = prefix .. result .. suffix&lt;br /&gt;
	&lt;br /&gt;
	if template then&lt;br /&gt;
		if not args.nodpl then&lt;br /&gt;
			result = result&lt;br /&gt;
				:gsub(&amp;#039;²{&amp;#039;,&amp;#039;{{&amp;#039;)&lt;br /&gt;
				:gsub(&amp;#039;}²&amp;#039;,&amp;#039;}}&amp;#039;)&lt;br /&gt;
				:gsub(&amp;#039;¦&amp;#039;,&amp;#039;|&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		result = result&lt;br /&gt;
			:gsub(&amp;#039;%^2{&amp;#039;,&amp;#039;{{&amp;#039;)	-- for use inside DPL&lt;br /&gt;
			:gsub(&amp;#039;}%^2&amp;#039;,&amp;#039;}}&amp;#039;)	--&lt;br /&gt;
			:gsub(&amp;#039;¹&amp;#039;,&amp;#039;|&amp;#039;)		--&lt;br /&gt;
		result = frame:preprocess(result)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._removeDuplicates(arr)&lt;br /&gt;
	local hash = {}&lt;br /&gt;
	local res = {}&lt;br /&gt;
&lt;br /&gt;
	for _,v in ipairs(arr) do&lt;br /&gt;
	   if (not hash[v]) then&lt;br /&gt;
	       res[#res+1] = v&lt;br /&gt;
	       hash[v] = true&lt;br /&gt;
	   end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._sort(arr, dir)&lt;br /&gt;
	local order = nil&lt;br /&gt;
	if (dir == -1 or dir == &amp;quot;-1&amp;quot;) then&lt;br /&gt;
		order = function(tVal, a, b) return a &amp;gt; b end&lt;br /&gt;
	elseif (dir == 1 or dir == &amp;quot;1&amp;quot;) then&lt;br /&gt;
		order = function(tVal, a, b) return a &amp;lt; b end&lt;br /&gt;
	else&lt;br /&gt;
		return arr&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(arr, function(a, b) return order(t, a, b) end)&lt;br /&gt;
	return arr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Wuffesan</name></author>
	</entry>
</feed>