<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://star-citizen.wiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3AArray</id>
	<title>Modul:Array - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://star-citizen.wiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3AArray"/>
	<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:Array&amp;action=history"/>
	<updated>2026-05-30T14:40:04Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Star Citizen Wiki</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://star-citizen.wiki/index.php?title=Modul:Array&amp;diff=80070&amp;oldid=prev</id>
		<title>FoXFTW: Automated syncing of modules from rev 308be26</title>
		<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:Array&amp;diff=80070&amp;oldid=prev"/>
		<updated>2024-04-09T20:17:07Z</updated>

		<summary type="html">&lt;p&gt;Automated syncing of modules from rev 308be26&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;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 9. April 2024, 22:17 Uhr&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-l78&quot;&gt;Zeile 78:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 78:&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;		end&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;		end&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;	else&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;	else&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;		assert(#lhs == #rhs, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;string&lt;/del&gt;.format(&amp;#039;Elementwise %s failed because arrays have different sizes (left: %d, right: %d)&amp;#039;, opName, #lhs, #rhs))&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;		assert(#lhs == #rhs, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.ustring&lt;/ins&gt;.format(&amp;#039;Elementwise %s failed because arrays have different sizes (left: %d, right: %d)&amp;#039;, opName, #lhs, #rhs))&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;		for i = 1, #lhs do&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;		for i = 1, #lhs do&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;			res[i] = fun(lhs[i], rhs[i])&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;			res[i] = fun(lhs[i], rhs[i])&lt;/div&gt;&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-l839&quot;&gt;Zeile 839:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 839:&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;	end&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;	end&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;	if type(values) == &amp;#039;table&amp;#039; then&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;	if type(values) == &amp;#039;table&amp;#039; then&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;		assert(#indexes == #values, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;string&lt;/del&gt;.format(&amp;quot;Module:Array.set: &amp;#039;indexes&amp;#039; and &amp;#039;values&amp;#039; arrays are not equal length (#indexes = %d, #values = %d)&amp;quot;, #indexes, #values))&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;		assert(#indexes == #values, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.ustring&lt;/ins&gt;.format(&amp;quot;Module:Array.set: &amp;#039;indexes&amp;#039; and &amp;#039;values&amp;#039; arrays are not equal length (#indexes = %d, #values = %d)&amp;quot;, #indexes, #values))&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;		for i = 1, #indexes do&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;		for i = 1, #indexes do&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;			arr[indexes[i]] = values[i]&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;			arr[indexes[i]] = values[i]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>FoXFTW</name></author>
	</entry>
	<entry>
		<id>https://star-citizen.wiki/index.php?title=Modul:Array&amp;diff=66995&amp;oldid=prev</id>
		<title>FoXFTW am 24. Juni 2023 um 18:11 Uhr</title>
		<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:Array&amp;diff=66995&amp;oldid=prev"/>
		<updated>2023-06-24T18:11:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://star-citizen.wiki/index.php?title=Modul:Array&amp;amp;diff=66995&amp;amp;oldid=66512&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>FoXFTW</name></author>
	</entry>
	<entry>
		<id>https://star-citizen.wiki/index.php?title=Modul:Array&amp;diff=66512&amp;oldid=prev</id>
		<title>FoXFTW: Die Seite wurde neu angelegt: „-- Imported from: https://runescape.wiki/w/Module:Array  -- &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]…“</title>
		<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:Array&amp;diff=66512&amp;oldid=prev"/>
		<updated>2023-06-24T12:24:21Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „-- Imported from: https://runescape.wiki/w/Module:Array  -- &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]…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Imported from: https://runescape.wiki/w/Module:Array&lt;br /&gt;
&lt;br /&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>FoXFTW</name></author>
	</entry>
</feed>