Module:TableTools/doc: Difference between revisions

m
no edit summary
mNo edit summary
mNo edit summary
Line 44: Line 44:
== numKeys ==
== numKeys ==


<syntaxhighlight lang="lua">
<pre>
TableTools.numKeys(t)
TableTools.numKeys(t)
</syntaxhighlight>
</pre>


Takes a table <code>''t''</code> and returns an array containing the numbers of any positive integer keys that have non-nil values, sorted in numerical order. For example, for the table {{code|code={'foo', nil, 'bar', 'baz', a = 'b'}|lang=lua}}, <code>numKeys</code> will return {{code|code={1, 3, 4}|lang=lua}}.
Takes a table <code>''t''</code> and returns an array containing the numbers of any positive integer keys that have non-nil values, sorted in numerical order. For example, for the table {{code|code={'foo', nil, 'bar', 'baz', a = 'b'}|lang=lua}}, <code>numKeys</code> will return {{code|code={1, 3, 4}|lang=lua}}.
Line 52: Line 52:
== affixNums ==
== affixNums ==


<syntaxhighlight lang="lua">
<pre>
TableTools.affixNums(t, prefix, suffix)
TableTools.affixNums(t, prefix, suffix)
</syntaxhighlight>
</pre>


Takes a table <code>''t''</code> and returns an array containing the numbers of keys with the optional prefix <code>''prefix''</code> and the optional suffix <code>''suffix''</code>. For example, for the table {{code|code={a1 = 'foo', a3 = 'bar', a6 = 'baz'}|lang=lua}} and the prefix <code>'a'</code>, <code>affixNums</code> will return {{code|code={1, 3, 6}|lang=lua}}. All characters in <code>''prefix''</code> and <code>''suffix''</code> are interpreted literally.
Takes a table <code>''t''</code> and returns an array containing the numbers of keys with the optional prefix <code>''prefix''</code> and the optional suffix <code>''suffix''</code>. For example, for the table {{code|code={a1 = 'foo', a3 = 'bar', a6 = 'baz'}|lang=lua}} and the prefix <code>'a'</code>, <code>affixNums</code> will return {{code|code={1, 3, 6}|lang=lua}}. All characters in <code>''prefix''</code> and <code>''suffix''</code> are interpreted literally.
Line 62: Line 62:
== numData ==
== numData ==


<syntaxhighlight lang="lua">
<pre>
TableTools.numData(t, compress)
TableTools.numData(t, compress)
</syntaxhighlight>
</pre


Given a table with keys like <code>"foo1"</code>, <code>"bar1"</code>, <code>"foo2"</code>, and <code>"baz2"</code>, returns a table of subtables in the format {{code|code={ [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }|lang=lua}}. Keys that don't end with an integer are stored in a subtable named <code>"other"</code>. The compress option compresses the table so that it can be iterated over with <code>ipairs</code>.
Given a table with keys like <code>"foo1"</code>, <code>"bar1"</code>, <code>"foo2"</code>, and <code>"baz2"</code>, returns a table of subtables in the format {{code|code={ [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }|lang=lua}}. Keys that don't end with an integer are stored in a subtable named <code>"other"</code>. The compress option compresses the table so that it can be iterated over with <code>ipairs</code>.
Line 70: Line 70:
== compressSparseArray ==
== compressSparseArray ==


<syntaxhighlight lang="lua">
<pre>
TableTools.compressSparseArray(t)
TableTools.compressSparseArray(t)
</syntaxhighlight>
</pre>


Takes an array <code>''t''</code> with one or more nil values, and removes the nil values while preserving the order, so that the array can be safely traversed with <code>ipairs</code>. Any keys that are not positive integers are removed. For example, for the table {{code|code={1, nil, foo = 'bar', 3, 2}|lang=lua}}, <code>compressSparseArray</code> will return {{code|code={1, 3, 2}|lang=lua}}.
Takes an array <code>''t''</code> with one or more nil values, and removes the nil values while preserving the order, so that the array can be safely traversed with <code>ipairs</code>. Any keys that are not positive integers are removed. For example, for the table {{code|code={1, nil, foo = 'bar', 3, 2}|lang=lua}}, <code>compressSparseArray</code> will return {{code|code={1, 3, 2}|lang=lua}}.
Line 80: Line 80:
== sparseIpairs ==
== sparseIpairs ==


<syntaxhighlight lang="lua">
<pre>
TableTools.sparseIpairs(t)
TableTools.sparseIpairs(t)
</syntaxhighlight>
</pre>


This is an iterator function for traversing a sparse array <code>''t''</code>. It is similar to <code>[[mw:Extension:Scribunto/Lua reference manual#ipairs|ipairs]]</code>, but will continue to iterate until the highest numerical key, whereas <code>ipairs</code> may stop after the first <code>nil</code> value. Any keys that are not positive integers are ignored.
This is an iterator function for traversing a sparse array <code>''t''</code>. It is similar to <code>[[mw:Extension:Scribunto/Lua reference manual#ipairs|ipairs]]</code>, but will continue to iterate until the highest numerical key, whereas <code>ipairs</code> may stop after the first <code>nil</code> value. Any keys that are not positive integers are ignored.
Line 98: Line 98:
== size ==
== size ==


<syntaxhighlight lang="lua">
<pre>
TableTools.size(t)
TableTools.size(t)
</syntaxhighlight>
</pre>


Finds the size of a key/value pair table ([[associative array]]). For example, for {{code|code={foo = 'foo', bar = 'bar'}|lang=lua}}, <code>size</code> will return <code>2</code>. The function will also work on arrays, but for arrays it is more efficient to use the <code>#</code> operator. Note that to find the size, this function uses the <code>[[mw:Extension:Scribunto/Lua reference manual#pairs|pairs]]</code> function to iterate through all of the keys.
Finds the size of a key/value pair table ([[associative array]]). For example, for {{code|code={foo = 'foo', bar = 'bar'}|lang=lua}}, <code>size</code> will return <code>2</code>. The function will also work on arrays, but for arrays it is more efficient to use the <code>#</code> operator. Note that to find the size, this function uses the <code>[[mw:Extension:Scribunto/Lua reference manual#pairs|pairs]]</code> function to iterate through all of the keys.
Line 114: Line 114:
== sortedPairs ==
== sortedPairs ==


<syntaxhighlight lang="lua">
<pre>
TableTools.sortedPairs(t, keySort)
TableTools.sortedPairs(t, keySort)
</syntaxhighlight>
</pre>


Iterates through a table, with the keys sorted using the <code>keysToList</code> function. If there are only numerical keys, <code>sparseIpairs</code> is probably more efficient.
Iterates through a table, with the keys sorted using the <code>keysToList</code> function. If there are only numerical keys, <code>sparseIpairs</code> is probably more efficient.
Line 122: Line 122:
== isArray ==
== isArray ==


<syntaxhighlight lang="lua">
<pre>
TableTools.isArray(value)
TableTools.isArray(value)
</syntaxhighlight>
</pre>


Returns <code>true</code> if <code>''value''</code> is a table and all keys are consecutive integers starting at 1.
Returns <code>true</code> if <code>''value''</code> is a table and all keys are consecutive integers starting at 1.
Line 130: Line 130:
== isArrayLike ==
== isArrayLike ==


<syntaxhighlight lang="lua">
<pre>
TableTools.isArrayLike(value)
TableTools.isArrayLike(value)
</syntaxhighlight>
</pre>


Returns <code>true</code> if <code>''value''</code> is iterable and all keys are consecutive integers starting at 1.
Returns <code>true</code> if <code>''value''</code> is iterable and all keys are consecutive integers starting at 1.
Line 138: Line 138:
== invert ==
== invert ==


<syntaxhighlight lang="lua">
<pre>
TableTools.invert(arr)
TableTools.invert(arr)
</syntaxhighlight>
</pre>


Transposes the keys and values in an array. For example, {{code|invert{ "a", "b", "c" }|lua}} yields {{code|code={ a=1, b=2, c=3 }|lang=lua}}.
Transposes the keys and values in an array. For example, {{code|invert{ "a", "b", "c" }|lua}} yields {{code|code={ a=1, b=2, c=3 }|lang=lua}}.
Line 146: Line 146:
== listToSet ==
== listToSet ==


<syntaxhighlight lang="lua">
<pre>
TableTools.listToSet(arr)
TableTools.listToSet(arr)
</syntaxhighlight>
</pre>


Creates a set from the array part of the table <code>''arr''</code>. Indexing the set by any of the values of the array returns <code>true</code>. For example, {{code|listToSet{ "a", "b", "c" }|lua}} yields {{code|code={ a=true, b=true, c=true }|lang=lua}}.
Creates a set from the array part of the table <code>''arr''</code>. Indexing the set by any of the values of the array returns <code>true</code>. For example, {{code|listToSet{ "a", "b", "c" }|lua}} yields {{code|code={ a=true, b=true, c=true }|lang=lua}}.
Line 154: Line 154:
== deepCopy ==
== deepCopy ==


<syntaxhighlight lang="lua">
<pre>
TableTools.deepCopy(orig, noMetatable, alreadySeen)
TableTools.deepCopy(orig, noMetatable, alreadySeen)
</syntaxhighlight>
</pre>


Creates a copy of the table <code>''orig''</code>. As with <code>mw.clone</code>, all values that are not functions are duplicated and the identity of tables is preserved. If <code>''noMetatable''</code> is <code>true</code>, then the metatable (if any) is not copied. Can copy tables loaded with <code>mw.loadData</code>.
Creates a copy of the table <code>''orig''</code>. As with <code>mw.clone</code>, all values that are not functions are duplicated and the identity of tables is preserved. If <code>''noMetatable''</code> is <code>true</code>, then the metatable (if any) is not copied. Can copy tables loaded with <code>mw.loadData</code>.
Line 164: Line 164:
== sparseConcat ==
== sparseConcat ==


<syntaxhighlight lang="lua">
<pre>
TableTools.sparseConcat(t, sep, i, j)
TableTools.sparseConcat(t, sep, i, j)
</syntaxhighlight>
</pre>


Concatenates all values in the table that are indexed by a positive integer, in order. For example, {{code|sparseConcat{ "a", nil, "c", "d" }|lua}} yields {{code|"acd"|lua}} and {{code|sparseConcat{ nil, "b", "c", "d" }|lua}} yields {{code|"bcd"|lua}}.
Concatenates all values in the table that are indexed by a positive integer, in order. For example, {{code|sparseConcat{ "a", nil, "c", "d" }|lua}} yields {{code|"acd"|lua}} and {{code|sparseConcat{ nil, "b", "c", "d" }|lua}} yields {{code|"bcd"|lua}}.
Line 172: Line 172:
== length ==
== length ==


<syntaxhighlight lang="lua">
<pre>
TableTools.length(t, prefix)
TableTools.length(t, prefix)
</syntaxhighlight>
</pre>


Finds the length of an array or of a quasi-array with keys with an optional <code>''prefix''</code> such as "data1", "data2", etc. It uses an [[exponential search]] algorithm to find the length, so as to use as few table lookups as possible.
Finds the length of an array or of a quasi-array with keys with an optional <code>''prefix''</code> such as "data1", "data2", etc. It uses an [[exponential search]] algorithm to find the length, so as to use as few table lookups as possible.
Line 182: Line 182:
== inArray ==
== inArray ==


<syntaxhighlight lang="lua">TableTools.inArray(array, searchElement)
<pre>TableTools.inArray(array, searchElement)
TableTools.inArray(array, searchElement, fromIndex)</syntaxhighlight>
TableTools.inArray(array, searchElement, fromIndex)</pre>


Returns <code>true</code> if <code>''searchElement''</code> is a member of the array <code>''array''</code>, and <code>false</code> otherwise. Equivalent to the javascript [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes Array.prototype.includes()] function, except fromIndex is 1-indexed instead of zero-indexed.
Returns <code>true</code> if <code>''searchElement''</code> is a member of the array <code>''array''</code>, and <code>false</code> otherwise. Equivalent to the javascript [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes Array.prototype.includes()] function, except fromIndex is 1-indexed instead of zero-indexed.
Line 200: Line 200:
== merge ==
== merge ==


<syntaxhighlight lang="lua">
<pre>
TableTools.merge(...)
TableTools.merge(...)
</syntaxhighlight>
</pre>


Given the arrays, returns an array containing the elements of each input array in sequence.
Given the arrays, returns an array containing the elements of each input array in sequence.
Line 208: Line 208:
== extend ==
== extend ==


<syntaxhighlight lang="lua">
<pre>
TableTools.extend(arr1, arr2)
TableTools.extend(arr1, arr2)
</syntaxhighlight>
</pre>


Extends the first array in place by appending all elements from the second array.
Extends the first array in place by appending all elements from the second array.
contributors, delete_pages, Interface administrators
4,701

edits