<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="rue">
	<id>https://wiki.kocky.cc/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AArray</id>
	<title>Модуль:Array - Історія едітовань</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kocky.cc/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AArray"/>
	<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;action=history"/>
	<updated>2026-04-04T07:17:15Z</updated>
	<subtitle>Історія едітовань той сторінкы на вікі</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=562&amp;oldid=prev</id>
		<title>Бетярь: 3 ревізії: Template:Infobox_Species from StarCitizenTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=562&amp;oldid=prev"/>
		<updated>2023-10-23T22:31:17Z</updated>

		<summary type="html">&lt;p&gt;3 ревізії: Template:Infobox_Species from StarCitizenTools&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;rue&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старша верзія&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Ревізія 00:31, 24 октовбра 2023&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff::1.12:old-76:rev-562 --&gt;
&lt;/table&gt;</summary>
		<author><name>Бетярь</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=76&amp;oldid=prev</id>
		<title>Бетярь: 1 ревізія: InfoboxNeue from StarCitizenTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=76&amp;oldid=prev"/>
		<updated>2023-10-17T23:55:16Z</updated>

		<summary type="html">&lt;p&gt;1 ревізія: InfoboxNeue from StarCitizenTools&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;rue&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старша верзія&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Ревізія 01:55, 18 октовбра 2023&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff::1.12:old-75:rev-76 --&gt;
&lt;/table&gt;</summary>
		<author><name>Бетярь</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=75&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistair3149 в 17:23, 24 юнія 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=75&amp;oldid=prev"/>
		<updated>2023-06-24T17:23:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;amp;diff=75&amp;amp;oldid=561&quot;&gt;Указати зміны&lt;/a&gt;</summary>
		<author><name>starcitizen&gt;Alistair3149</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=561&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistair3149: Remove logger dependency</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=561&amp;oldid=prev"/>
		<updated>2023-06-24T17:19:38Z</updated>

		<summary type="html">&lt;p&gt;Remove logger dependency&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;rue&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старша верзія&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Ревізія 19:19, 24 юнія 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l26&quot;&gt;Рядок 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Рядок 26:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;function arr.__tostring(array)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;function arr.__tostring(array)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local dumpObject = require(&#039;Module:Logger&#039;).dumpObject&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     setmetatable(array, nil)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     setmetatable(array, nil)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local str = &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dumpObject&lt;/del&gt;(array&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, {clean=true, collapseLimit=100}&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local str = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.logObject&lt;/ins&gt;( array )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     setmetatable(array, arr)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     setmetatable(array, arr)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return str&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return str&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>starcitizen&gt;Alistair3149</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=560&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistair3149: Sync with upstream</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=560&amp;oldid=prev"/>
		<updated>2023-06-24T17:09:34Z</updated>

		<summary type="html">&lt;p&gt;Sync with upstream&lt;/p&gt;
&lt;a href=&quot;https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;amp;diff=560&amp;amp;oldid=559&quot;&gt;Указати зміны&lt;/a&gt;</summary>
		<author><name>starcitizen&gt;Alistair3149</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=559&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistair3149: Created page with &quot;-- &lt;nowiki&gt; awawa local libraryUtil = require(&#039;libraryUtil&#039;) local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti local arr = {}  setmetatable(arr, { 	__call = function (_, array) 		return arr.new(array) 	end })  function arr.__index(t, k) 	if type(k) == &#039;table&#039; then 		local res = arr.new() 		for i = 1, #t do 			res[i] = t[k[i]] 		end 		return res 	else 		return arr[k] 	end end  function arr.__tostring(array) 	local dumpObject = requi...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Array&amp;diff=559&amp;oldid=prev"/>
		<updated>2023-01-23T21:27:31Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- &amp;lt;nowiki&amp;gt; awawa local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;) local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti local arr = {}  setmetatable(arr, { 	__call = function (_, array) 		return arr.new(array) 	end })  function arr.__index(t, k) 	if type(k) == &amp;#039;table&amp;#039; then 		local res = arr.new() 		for i = 1, #t do 			res[i] = t[k[i]] 		end 		return res 	else 		return arr[k] 	end end  function arr.__tostring(array) 	local dumpObject = requi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- &amp;lt;nowiki&amp;gt; awawa&lt;br /&gt;
local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
local arr = {}&lt;br /&gt;
&lt;br /&gt;
setmetatable(arr, {&lt;br /&gt;
	__call = function (_, array)&lt;br /&gt;
		return arr.new(array)&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
function arr.__index(t, k)&lt;br /&gt;
	if type(k) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		local res = arr.new()&lt;br /&gt;
		for i = 1, #t do&lt;br /&gt;
			res[i] = t[k[i]]&lt;br /&gt;
		end&lt;br /&gt;
		return res&lt;br /&gt;
	else&lt;br /&gt;
		return arr[k]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__tostring(array)&lt;br /&gt;
	local dumpObject = require(&amp;#039;Module:Logger&amp;#039;).dumpObject&lt;br /&gt;
	setmetatable(array, nil)&lt;br /&gt;
	local str = dumpObject(array, {clean=true, collapseLimit=100})&lt;br /&gt;
	setmetatable(array, arr)&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__concat(lhs, rhs)&lt;br /&gt;
	if type(lhs) == &amp;#039;table&amp;#039; and type(rhs) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		local res = setmetatable({}, getmetatable(lhs) or getmetatable(rhs))&lt;br /&gt;
		for i = 1, #lhs do&lt;br /&gt;
			res[i] = lhs[i]&lt;br /&gt;
		end&lt;br /&gt;
		local l = #lhs&lt;br /&gt;
		for i = 1, #rhs do&lt;br /&gt;
			res[i + l] = rhs[i]&lt;br /&gt;
		end&lt;br /&gt;
		return res&lt;br /&gt;
	else&lt;br /&gt;
		return tostring(lhs) .. tostring(rhs)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__unm(array)&lt;br /&gt;
	return arr.map(array, function(x) return -x end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mathTemplate(lhs, rhs, funName, fun)&lt;br /&gt;
	checkTypeMulti(&amp;#039;Module:Array.&amp;#039; .. funName, 1, lhs, {&amp;#039;number&amp;#039;, &amp;#039;table&amp;#039;})&lt;br /&gt;
	checkTypeMulti(&amp;#039;Module:Array.&amp;#039; .. funName, 2, rhs, {&amp;#039;number&amp;#039;, &amp;#039;table&amp;#039;})&lt;br /&gt;
	local res = setmetatable({}, getmetatable(lhs) or getmetatable(rhs))&lt;br /&gt;
&lt;br /&gt;
	if type(lhs) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		for i = 1, #rhs do&lt;br /&gt;
			res[i] = fun(lhs, rhs[i])&lt;br /&gt;
		end&lt;br /&gt;
	elseif type(rhs) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		for i = 1, #lhs do&lt;br /&gt;
			res[i] = fun(lhs[i], rhs)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		assert(#lhs == #rhs, string.format(&amp;#039;Tables are not equal length (lhs=%d, rhs=%d)&amp;#039;, #lhs, #rhs))&lt;br /&gt;
		for i = 1, #lhs do&lt;br /&gt;
			res[i] = fun(lhs[i], rhs[i])&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 arr.__add(lhs, rhs)&lt;br /&gt;
	return mathTemplate(lhs, rhs, &amp;#039;__add&amp;#039;, function(x, y) return x + y end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__sub(lhs, rhs)&lt;br /&gt;
	return mathTemplate(lhs, rhs, &amp;#039;__sub&amp;#039;, function(x, y) return x - y end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__mul(lhs, rhs)&lt;br /&gt;
	return mathTemplate(lhs, rhs, &amp;#039;__mul&amp;#039;, function(x, y) return x * y end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__div(lhs, rhs)&lt;br /&gt;
	return mathTemplate(lhs, rhs, &amp;#039;__div&amp;#039;, function(x, y) return x / y end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__pow(lhs, rhs)&lt;br /&gt;
	return mathTemplate(lhs, rhs, &amp;#039;__pow&amp;#039;, function(x, y) return x ^ y end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__lt(lhs, rhs)&lt;br /&gt;
	for i = 1, math.min(#lhs, #rhs) do&lt;br /&gt;
		if lhs[i] &amp;gt;= rhs[i] then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__le(lhs, rhs)&lt;br /&gt;
	for i = 1, math.min(#lhs, #rhs) do&lt;br /&gt;
		if lhs[i] &amp;gt; rhs[i] then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.__eq(lhs, rhs)&lt;br /&gt;
	if #lhs ~= #rhs then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, #lhs do&lt;br /&gt;
		if lhs[i] ~= rhs[i] then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.all(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.all&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	if fn == nil then fn = function(item) return item end end&lt;br /&gt;
	if type(fn) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
		local val = fn&lt;br /&gt;
		fn = function(item) return item == val end&lt;br /&gt;
	end&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		if not fn(array[i], i) then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.any(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.any&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	if fn == nil then fn = function(item) return item end end&lt;br /&gt;
	if type(fn) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
		local val = fn&lt;br /&gt;
		fn = function(item) return item == val end&lt;br /&gt;
	end&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		if fn(array[i], i) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.clean(array)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.clean&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	for i = 1, #array do&lt;br /&gt;
		if type(array[i]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			arr.clean(array[i])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	setmetatable(array, nil)&lt;br /&gt;
	return array&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.contains(array, elem, useElemTableContent)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.contains&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	if type(elem) == &amp;#039;table&amp;#039; and useElemTableContent ~= false then&lt;br /&gt;
		local elemMap = {}&lt;br /&gt;
		local isFound = {}&lt;br /&gt;
		arr.each(elem, function(x, i) elemMap[x] = i; isFound[i] = false end)&lt;br /&gt;
		for i = 1, #array do&lt;br /&gt;
			local j = elemMap[array[i]]&lt;br /&gt;
			if j then&lt;br /&gt;
				isFound[j] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return arr.all(isFound, true)&lt;br /&gt;
	else&lt;br /&gt;
		return arr.any(array, function(item) return item == elem end)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.count(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.count&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	if fn == nil then fn = function(item) return item end end&lt;br /&gt;
	if type(fn) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
		local val = fn&lt;br /&gt;
		fn = function(item) return item == val end&lt;br /&gt;
	end&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for i = 1, #array do&lt;br /&gt;
		if fn(array[i]) then&lt;br /&gt;
			count = count + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.diff(array, order)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.diff&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.diff&amp;#039;, 2, order, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	local res = setmetatable({}, getmetatable(array))&lt;br /&gt;
	for i = 1, #array - 1 do&lt;br /&gt;
		res[i] = array[i+1] - array[i]&lt;br /&gt;
	end&lt;br /&gt;
	if order and order &amp;gt; 1 then&lt;br /&gt;
		return arr.diff(res, order - 1)&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.each(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.each&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.each&amp;#039;, 2, fn, &amp;#039;function&amp;#039;)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		fn(array[i], i)&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.filter(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.filter&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	if fn == nil then fn = function(item) return item end end&lt;br /&gt;
	if type(fn) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
		local val = fn&lt;br /&gt;
		fn = function(item) return item == val end&lt;br /&gt;
	end&lt;br /&gt;
	local r = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local len = 0&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		if fn(array[i], i) then&lt;br /&gt;
			len = len + 1&lt;br /&gt;
			r[len] = array[i]&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.find(array, fn, default)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.find&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkTypeMulti(&amp;#039;Module:Array.find_index&amp;#039;, 2, fn, {&amp;#039;function&amp;#039;, &amp;#039;table&amp;#039;, &amp;#039;number&amp;#039;, &amp;#039;boolean&amp;#039;})&lt;br /&gt;
	if type(fn) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
		local val = fn&lt;br /&gt;
		fn = function(item) return item == val end&lt;br /&gt;
	end&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		if fn(array[i], i) then&lt;br /&gt;
			return array[i], i&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.find_index(array, fn, default)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.find_index&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkTypeMulti(&amp;#039;Module:Array.find_index&amp;#039;, 2, fn, {&amp;#039;function&amp;#039;, &amp;#039;table&amp;#039;, &amp;#039;number&amp;#039;, &amp;#039;boolean&amp;#039;})&lt;br /&gt;
	if type(fn) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
		local val = fn&lt;br /&gt;
		fn = function(item) return item == val end&lt;br /&gt;
	end&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		if fn(array[i], i) then&lt;br /&gt;
			return i&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.newIncrementor(start, step)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.newIncrementor&amp;#039;, 1, start, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.newIncrementor&amp;#039;, 2, step, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	step = step or 1&lt;br /&gt;
	local n = (start or 1) - step&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	return setmetatable(obj, {&lt;br /&gt;
		__call = function() n = n + step return n end,&lt;br /&gt;
		__tostring = function() return n end,&lt;br /&gt;
		__index = function() return n end,&lt;br /&gt;
		__newindex = function(self, k, v)&lt;br /&gt;
			if k == &amp;#039;step&amp;#039; and type(v) == &amp;#039;number&amp;#039; then&lt;br /&gt;
				step = v&lt;br /&gt;
			elseif type(v) == &amp;#039;number&amp;#039; then&lt;br /&gt;
				n = v&lt;br /&gt;
			end&lt;br /&gt;
		end,&lt;br /&gt;
		__concat = function(x, y) return tostring(x) .. tostring(y) end&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.int(array, start, stop)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.int&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.int&amp;#039;, 2, start, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.int&amp;#039;, 3, stop, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	local res = setmetatable({}, getmetatable(array))&lt;br /&gt;
	start = start or 1&lt;br /&gt;
	stop = stop or #array&lt;br /&gt;
	res[1] = array[start]&lt;br /&gt;
	for i = 1, stop - start do&lt;br /&gt;
		res[i+1] = res[i] + array[start + i]&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.intersect(array1, array2)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.intersect&amp;#039;, 1, array1, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.intersect&amp;#039;, 2, array2, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local array2Elements = {}&lt;br /&gt;
	local res = setmetatable({}, getmetatable(array1) or getmetatable(array2))&lt;br /&gt;
	local len = 0&lt;br /&gt;
	arr.each(array2, function(item) array2Elements[item] = true end)&lt;br /&gt;
	arr.each(array1, function(item)&lt;br /&gt;
		if array2Elements[item] then&lt;br /&gt;
			len = len + 1&lt;br /&gt;
			res[len] = item&lt;br /&gt;
		end&lt;br /&gt;
	end)&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.intersects(array1, array2)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.intersects&amp;#039;, 1, array1, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.intersects&amp;#039;, 2, array2, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local small = {}&lt;br /&gt;
	local large&lt;br /&gt;
	if #array1 &amp;lt;= #array2 then&lt;br /&gt;
		arr.each(array1, function(item) small[item] = true end)&lt;br /&gt;
		large = array2&lt;br /&gt;
	else&lt;br /&gt;
		arr.each(array2, function(item) small[item] = true end)&lt;br /&gt;
		large = array1&lt;br /&gt;
	end&lt;br /&gt;
	return arr.any(large, function(item) return small[item] end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.insert(array, val, index, unpackVal)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.insert&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.insert&amp;#039;, 3, index, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.insert&amp;#039;, 4, unpackVal, &amp;#039;boolean&amp;#039;, true)&lt;br /&gt;
	local len = #array&lt;br /&gt;
	index = index or (len + 1)&lt;br /&gt;
&lt;br /&gt;
	if type(val) == &amp;#039;table&amp;#039; and unpackVal ~= false then&lt;br /&gt;
		local len2 = #val&lt;br /&gt;
		for i = 0, len - index do&lt;br /&gt;
			array[len + len2 - i] = array[len - i]&lt;br /&gt;
		end&lt;br /&gt;
		for i = 0, len2 - 1 do&lt;br /&gt;
			array[index + i] = val[i + 1]&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(array, index, val)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return array&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.map(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.map&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.map&amp;#039;, 2, fn, &amp;#039;function&amp;#039;)&lt;br /&gt;
	local len = 0&lt;br /&gt;
	local r = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		local tmp = fn(array[i], i)&lt;br /&gt;
		if tmp ~= nil then&lt;br /&gt;
			len = len + 1&lt;br /&gt;
			r[len] = tmp&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.max_by(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.max_by&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.max_by&amp;#039;, 2, fn, &amp;#039;function&amp;#039;)&lt;br /&gt;
	return unpack(arr.reduce(array, function(new, old, i)&lt;br /&gt;
		local y = fn(new)&lt;br /&gt;
		return y &amp;gt; old[2] and {new, y, i} or old&lt;br /&gt;
	end, {nil, -math.huge}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.max(array)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.max&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local val, _, i = arr.max_by(array, function(x) return x end)&lt;br /&gt;
	return val, i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.min(array)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.min&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local val, _, i = arr.max_by(array, function(x) return -x end)&lt;br /&gt;
	return val, i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.new(array)&lt;br /&gt;
	array = array or {}&lt;br /&gt;
	for _, v in pairs(array) do&lt;br /&gt;
		if type(v) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			arr.new(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if getmetatable(array) == nil then&lt;br /&gt;
		setmetatable(array, arr)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return array&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.range(start, stop, step)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.range&amp;#039;, 1, start, &amp;#039;number&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.range&amp;#039;, 2, stop, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.range&amp;#039;, 3, step, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	local array = setmetatable({}, arr)&lt;br /&gt;
	local len = 0&lt;br /&gt;
	if not stop then&lt;br /&gt;
		stop = start&lt;br /&gt;
		start = 1&lt;br /&gt;
	end&lt;br /&gt;
	for i = start, stop, step or 1 do&lt;br /&gt;
		len = len + 1&lt;br /&gt;
		array[len] = i&lt;br /&gt;
	end&lt;br /&gt;
	return array&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.reduce(array, fn, accumulator)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.reduce&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.reduce&amp;#039;, 2, fn, &amp;#039;function&amp;#039;)&lt;br /&gt;
	local acc = accumulator&lt;br /&gt;
	local i = 1&lt;br /&gt;
	if acc == nil then&lt;br /&gt;
		acc = array[1]&lt;br /&gt;
		i = 2&lt;br /&gt;
	end&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		acc = fn(array[i], acc, i)&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return acc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.reject(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.reject&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkTypeMulti(&amp;#039;Module:Array.reject&amp;#039;, 2, fn, {&amp;#039;function&amp;#039;, &amp;#039;table&amp;#039;, &amp;#039;number&amp;#039;, &amp;#039;boolean&amp;#039;})&lt;br /&gt;
	if fn == nil then fn = function(item) return item end end&lt;br /&gt;
	if type(fn) ~= &amp;#039;function&amp;#039; and type(fn) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		fn = {fn}&lt;br /&gt;
	end&lt;br /&gt;
	local r = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local len = 0&lt;br /&gt;
	if type(fn) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		local i = 1&lt;br /&gt;
		while array[i] ~= nil do&lt;br /&gt;
			if not fn(array[i], i) then&lt;br /&gt;
				len = len + 1&lt;br /&gt;
				r[len] = array[i]&lt;br /&gt;
			end&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local rejectMap = {}&lt;br /&gt;
		arr.each(fn, function(item) rejectMap[item] = true end)&lt;br /&gt;
		local i = 1&lt;br /&gt;
		while array[i] ~= nil do&lt;br /&gt;
			if not rejectMap[array[i]] then&lt;br /&gt;
				len = len + 1&lt;br /&gt;
				r[len] = array[i]&lt;br /&gt;
			end&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.rep(val, n)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.rep&amp;#039;, 2, n, &amp;#039;number&amp;#039;)&lt;br /&gt;
	local r = setmetatable({}, arr)&lt;br /&gt;
	for i = 1, n do&lt;br /&gt;
		r[i] = val&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.scan(array, fn, accumulator)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.scan&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.scan&amp;#039;, 2, fn, &amp;#039;function&amp;#039;)&lt;br /&gt;
	local acc = accumulator&lt;br /&gt;
	local r = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		if i == 1 and not accumulator then&lt;br /&gt;
			acc = array[i]&lt;br /&gt;
		else&lt;br /&gt;
			acc = fn(array[i], acc)&lt;br /&gt;
		end&lt;br /&gt;
		r[i] = acc&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.slice(array, start, finish)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.slice&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.slice&amp;#039;, 2, start, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.slice&amp;#039;, 3, finish, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	start = start or 1&lt;br /&gt;
	finish = finish or #array&lt;br /&gt;
	if start &amp;lt; 0 and finish == nil then&lt;br /&gt;
		finish = #array + start&lt;br /&gt;
		start = 1&lt;br /&gt;
	elseif start &amp;lt; 0 then&lt;br /&gt;
		start = #array + start&lt;br /&gt;
	end&lt;br /&gt;
	if finish &amp;lt; 0 then&lt;br /&gt;
		finish = #array + finish&lt;br /&gt;
	end&lt;br /&gt;
	local r = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local len = 0&lt;br /&gt;
	for i = start, finish do&lt;br /&gt;
		len = len + 1&lt;br /&gt;
		r[len] = array[i]&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.split(array, count)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.split&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.split&amp;#039;, 2, count, &amp;#039;number&amp;#039;)&lt;br /&gt;
	local x = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local y = setmetatable({}, getmetatable(array))&lt;br /&gt;
	for i = 1, #array do&lt;br /&gt;
		table.insert(i &amp;lt;= count and x or y, array[i])&lt;br /&gt;
	end&lt;br /&gt;
	return x, y&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.sum(array)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.sum&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local res = 0&lt;br /&gt;
	for i = 1, #array do&lt;br /&gt;
		res = res + array[i]&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.take(array, count, offset)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.take&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.take&amp;#039;, 2, count, &amp;#039;number&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.take&amp;#039;, 3, offset, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	local x = setmetatable({}, getmetatable(array))&lt;br /&gt;
	for i = offset or 1, #array do&lt;br /&gt;
		if i &amp;lt;= count then&lt;br /&gt;
			table.insert(x, array[i])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return x&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.take_every(array, n, offset)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.take_every&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.take_every&amp;#039;, 2, n, &amp;#039;number&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.take_every&amp;#039;, 3, offset, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	local r = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local len = 0&lt;br /&gt;
	local i = offset or 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		len = len + 1&lt;br /&gt;
		r[len] = array[i]&lt;br /&gt;
		i = i + n&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.unique(array, fn)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.unique&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.unique&amp;#039;, 2, fn, &amp;#039;function&amp;#039;, true)&lt;br /&gt;
	fn = fn or function(item) return item end&lt;br /&gt;
	local r = setmetatable({}, getmetatable(array))&lt;br /&gt;
	local len = 0&lt;br /&gt;
	local hash = {}&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while array[i] ~= nil do&lt;br /&gt;
		local id = fn(array[i])&lt;br /&gt;
		if not hash[id] then&lt;br /&gt;
			len = len + 1&lt;br /&gt;
			r[len] = array[i]&lt;br /&gt;
			hash[id] = true&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.update(array, indexes, values)&lt;br /&gt;
	checkType(&amp;#039;Module:Array.update&amp;#039;, 1, array, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkTypeMulti(&amp;#039;Module:Array.update&amp;#039;, 2, indexes, {&amp;#039;table&amp;#039;, &amp;#039;number&amp;#039;})&lt;br /&gt;
	if type(indexes) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		indexes = {indexes}&lt;br /&gt;
	end&lt;br /&gt;
	if type(values) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		assert(#indexes == #values, &amp;#039;Values array must be of equal length as index array&amp;#039;)&lt;br /&gt;
		for i = 1, #indexes do&lt;br /&gt;
			array[indexes[i]] = values[i]&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for i = 1, #indexes do&lt;br /&gt;
			array[indexes[i]] = values&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return array&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arr.zip(...)&lt;br /&gt;
	local arrays = { ... }&lt;br /&gt;
	checkType(&amp;#039;Module:Array.zip&amp;#039;, 1, arrays[1], &amp;#039;table&amp;#039;)&lt;br /&gt;
	local r = setmetatable({}, getmetatable(arrays[1]))&lt;br /&gt;
	local _, longest = arr.max_by(arrays, function(array) return #array end)&lt;br /&gt;
	for i = 1, longest do&lt;br /&gt;
		local q = {}&lt;br /&gt;
		for j = 1, #arrays do&lt;br /&gt;
			table.insert(q, arrays[j][i])&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(r, q)&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arr&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>starcitizen&gt;Alistair3149</name></author>
	</entry>
</feed>