<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://wiki.itworks.cc/index.php?action=history&amp;feed=atom&amp;title=Module%3ATableTools%2Fdoc</id>
	<title>Module:TableTools/doc - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itworks.cc/index.php?action=history&amp;feed=atom&amp;title=Module%3ATableTools%2Fdoc"/>
	<link rel="alternate" type="text/html" href="https://wiki.itworks.cc/index.php?title=Module:TableTools/doc&amp;action=history"/>
	<updated>2026-06-18T10:30:52Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.itworks.cc/index.php?title=Module:TableTools/doc&amp;diff=670&amp;oldid=prev</id>
		<title>甲虫：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://wiki.itworks.cc/index.php?title=Module:TableTools/doc&amp;diff=670&amp;oldid=prev"/>
		<updated>2024-10-14T07:17:08Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&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;zh&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;2024年10月14日 (一) 07:17的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;zh&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawiki:diff:1.41:old-669:rev-670 --&gt;
&lt;/table&gt;</summary>
		<author><name>甲虫</name></author>
	</entry>
	<entry>
		<id>https://wiki.itworks.cc/index.php?title=Module:TableTools/doc&amp;diff=669&amp;oldid=prev</id>
		<title>zh&gt;Dabao qian：​// Edit via Wikiplus</title>
		<link rel="alternate" type="text/html" href="https://wiki.itworks.cc/index.php?title=Module:TableTools/doc&amp;diff=669&amp;oldid=prev"/>
		<updated>2024-10-03T05:08:46Z</updated>

		<summary type="html">&lt;p&gt;// Edit via Wikiplus&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{high-use|256707}}&lt;br /&gt;
{{Synchronizer|lang=en}}&lt;br /&gt;
本模块包含一系列用于处理Lua表的函数。这是个元模块，用于其他Lua模块调用，而不应该由#invoke直接调用。&lt;br /&gt;
&lt;br /&gt;
== 加载模块 ==&lt;br /&gt;
&lt;br /&gt;
如需加载任何函数，首先需要加载模块。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local TableTools = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== isPositiveInteger ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.isPositiveInteger(value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果&amp;lt;code&amp;gt;&amp;#039;&amp;#039;value&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;是正整数，返回&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;，否则返回&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;。虽然此函数不是应用于表的，但这里仍收录了此函数以决定一个给定的键是否在表的数组部分或哈希部分。&lt;br /&gt;
&lt;br /&gt;
== isNan ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.isNan(value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果&amp;lt;code&amp;gt;&amp;#039;&amp;#039;value&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;是NaN值，返回&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;，否则返回&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;。虽然此函数不是应用于表的，但这里仍收录了此函数以决定一个值能否作为有效的键。（将NaN作为键会报错。）&lt;br /&gt;
&lt;br /&gt;
== shallowClone ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.shallowClone(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
返回表格的副本。返回的值是一个新表，但是所有的子表和函数都会共用。不会绕过元表，但返回的表自身不会带有元表。如需在创建新表时不共享子表格且要复制元表，可以使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.clone|mw.clone]]。&lt;br /&gt;
&lt;br /&gt;
== removeDuplicates ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.removeDuplicates(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
从数组中返回重复值。此函数仅用于标准的数组，所有非正整数键的一律忽略，第一个&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;后的值也会忽略。（对于包含&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;的数组，可以先使用[[#compressSparseArray|compressSparseArray]]。）此函数尝试保护数组的顺序：有重复值时，仅保留最早出现的那个。例如，对于表{{code|code={5, 4, 4, 3, 4, 2, 2, 1}|lang=lua}}，removeDuplicates返回{{code|code={5, 4, 3, 2, 1}|lang=lua}}。&lt;br /&gt;
&lt;br /&gt;
== numKeys ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.numKeys(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
接收表&amp;lt;code&amp;gt;&amp;#039;&amp;#039;t&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;并以数字顺序返回拥有非nil值的正整数键的数量。例如，对于{{code|code={&amp;#039;foo&amp;#039;, nil, &amp;#039;bar&amp;#039;, &amp;#039;baz&amp;#039;, a = &amp;#039;b&amp;#039;}|lang=lua}}，numKeys返回{{code|code={1, 3, 4}|lang=lua}}。&lt;br /&gt;
&lt;br /&gt;
== affixNums ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.affixNums(t, prefix, suffix)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
接收表&amp;lt;code&amp;gt;&amp;#039;&amp;#039;t&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;并返回包含含有可选前缀&amp;lt;code&amp;gt;&amp;#039;&amp;#039;prefix&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;和可选后缀&amp;lt;code&amp;gt;&amp;#039;&amp;#039;suffix&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;的键的数量的数组。例如，对于表{{code|code={a1 = &amp;#039;foo&amp;#039;, a3 = &amp;#039;bar&amp;#039;, a6 = &amp;#039;baz&amp;#039;}|lang=lua}}和前缀&amp;lt;code&amp;gt;&amp;#039;a&amp;#039;&amp;lt;/code&amp;gt;，affixNums返回{{code|code={1, 3, 6}|lang=lua}}。&amp;lt;code&amp;gt;&amp;#039;&amp;#039;prefix&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;&amp;#039;&amp;#039;suffix&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;的值均按字面解释（不使用正则表达式）。&lt;br /&gt;
&lt;br /&gt;
== numData ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.numData(t, compress)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
假如一个表有像foo1、bar1、foo2、baz2这样的键，返回如下格式的子表的表{{code|code={ [1] = {foo = &amp;#039;text&amp;#039;, bar = &amp;#039;text&amp;#039;}, [2] = {foo = &amp;#039;text&amp;#039;, baz = &amp;#039;text&amp;#039;} }|lang=lua}}。不以整数结尾的键存储在命名为other的子表中。compress选项会压缩表以便通过ipairs迭代。&lt;br /&gt;
&lt;br /&gt;
== compressSparseArray ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.compressSparseArray(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
接收一个带有一个或更多nil值的数组&amp;lt;code&amp;gt;&amp;#039;&amp;#039;t&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;，移除所有的nil值，不影响其他值的顺序，以便于安全地通过ipairs遍历。所有非正整数的键都会移除。例如，对于表{{code|code={1, nil, foo = &amp;#039;bar&amp;#039;, 3, 2}|lang=lua}}，compressSparseArray返回{{code|code={1, 3, 2}|lang=lua}}。&lt;br /&gt;
&lt;br /&gt;
== sparseIpairs ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.sparseIpairs(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这是用于遍历稀疏数组&amp;lt;code&amp;gt;&amp;#039;&amp;#039;t&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;的迭代器函数。类似于[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#ipairs|ipairs]]，但会一直迭代直到最高的数字键，而ipairs遇到第一个&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;就可能会终止。忽略所有的非正整数键。&lt;br /&gt;
&lt;br /&gt;
sparseIpairs常用于通用的&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;循环。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
for i, v in TableTools.sparseIpairs(t) do&lt;br /&gt;
   -- 代码&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
注意sparseIpairs会在实现时使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#pairs|pairs]]。尽管一些键看上去被忽略，但实际上运行时也会遍历到。&lt;br /&gt;
&lt;br /&gt;
== size ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.size(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
寻找“键/值对”表的大小。例如，对于{{code|code={foo = &amp;#039;foo&amp;#039;, bar = &amp;#039;bar&amp;#039;}|lang=lua}}，size返回&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;。函数也可以用于数组，但是对于数组，使用#操作符更高效。注意，为了查找表的大小，函数会使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#pairs|pairs]]函数以遍历所有的表键。&lt;br /&gt;
&lt;br /&gt;
== keysToList ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.keysToList(t, keySort)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
返回表的键的列表，并按默认比较函数或者自定义&amp;lt;code&amp;gt;keySort&amp;lt;/code&amp;gt;函数排序，与[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#table.sort|&amp;lt;code&amp;gt;table.sort&amp;lt;/code&amp;gt;]]的&amp;lt;code&amp;gt;comp&amp;lt;/code&amp;gt;函数类似。&lt;br /&gt;
&lt;br /&gt;
== sortedPairs ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.sortedPairs(t, keySort)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
迭代表，并使用&amp;lt;code&amp;gt;keysToList&amp;lt;/code&amp;gt;函数来排序键。如果只有数字键，&amp;lt;code&amp;gt;sparseIpairs&amp;lt;/code&amp;gt;可能更高效。&lt;br /&gt;
&lt;br /&gt;
== isArray ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.isArray(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果表中的所有键都是以&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;开始的接连不断的整数，返回true。&lt;br /&gt;
&lt;br /&gt;
== listToSet ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.listToSet(arr)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
从表&amp;lt;code&amp;gt;arr&amp;lt;/code&amp;gt;的数组部分创建一个集（set）。用&amp;lt;code&amp;gt;arr&amp;lt;/code&amp;gt;的任何值来索引集都会返回&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local set = TableTools.listToSet { &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; }&lt;br /&gt;
assert(set[&amp;quot;a&amp;quot;] == true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== invert ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.invert(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
交换数组中的键和值。例如，&amp;lt;code&amp;gt;invert{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; }&amp;lt;/code&amp;gt;产生&amp;lt;code&amp;gt;{ a = 1, b = 2, c = 3 }&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== deepCopy ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.deepCopy(orig, noMetatable, alreadySeen)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
返回表&amp;lt;code&amp;gt;orig&amp;lt;/code&amp;gt;的副本，类似于&amp;lt;code&amp;gt;mw.clone&amp;lt;/code&amp;gt;，所有非函数的值都会复制，并保留表的唯一性。如果&amp;lt;code&amp;gt;noMetatable&amp;lt;/code&amp;gt;为&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;，则不会复制元表（如有）。可以复制由&amp;lt;code&amp;gt;mw.loadData&amp;lt;/code&amp;gt;加载的表。&lt;br /&gt;
&lt;br /&gt;
与&amp;lt;code&amp;gt;mw.clone&amp;lt;/code&amp;gt;类似，但&amp;lt;code&amp;gt;mw.clone&amp;lt;/code&amp;gt;不能够复制由&amp;lt;code&amp;gt;mw.loadData&amp;lt;/code&amp;gt;加载的表，也不允许拒绝复制元表。&lt;br /&gt;
&lt;br /&gt;
== sparseConcat ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.sparseConcat(t, sep)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
按顺序连接被正整数索引的表的所有值。&lt;br /&gt;
&lt;br /&gt;
== length ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.length(t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
查找数组的长度，或者带有像data1、data2这样的键的准数组。使用[[指数搜索]]算法以查找长度，以便于尽可能少地使用表查找（table lookup）。&lt;br /&gt;
&lt;br /&gt;
对于准数组，此算法对使用元表的数组有用（例如[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#frame.args|frame.args]]）。对于正常数组，只需要使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Length operator|#操作符]]，因为#操作符是由[[C语言]]实现的，速度更快。&lt;br /&gt;
&lt;br /&gt;
== inArray ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
TableTools.inArray(arr, valueToFind)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果&amp;lt;code&amp;gt;valueToFind&amp;lt;/code&amp;gt;是数组&amp;lt;code&amp;gt;arr&amp;lt;/code&amp;gt;的成员，返回&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; inline&amp;gt;true&amp;lt;/syntaxhighlight&amp;gt;，否则返回&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; inline&amp;gt;false&amp;lt;/syntaxhighlight&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox||&lt;br /&gt;
[[Category:维基百科元模块|TableTools]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>zh&gt;Dabao qian</name></author>
	</entry>
</feed>