打开/关闭搜索
搜索
打开/关闭菜单
10
29
3
584
大天使虫洞百科
导航
首页
加入EVE Online
资助甲虫
最近更改
随机页面
特殊页面
上传文件
外部链接
zKillboard
大天使对外频道(QQ)
大天使边境要塞(Discord)
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
创建账号
登录
查看“︁Module:TableTools/doc”︁的源代码
来自大天使虫洞百科
更多语言
查看
阅读
查看源代码
查看历史
associated-pages
模块
讨论
更多操作
←
Module:TableTools/doc
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{high-use|256707}} {{Synchronizer|lang=en}} 本模块包含一系列用于处理Lua表的函数。这是个元模块,用于其他Lua模块调用,而不应该由#invoke直接调用。 == 加载模块 == 如需加载任何函数,首先需要加载模块。 <syntaxhighlight lang="lua"> local TableTools = require('Module:TableTools') </syntaxhighlight> == isPositiveInteger == <syntaxhighlight lang="lua"> TableTools.isPositiveInteger(value) </syntaxhighlight> 如果<code>''value''</code>是正整数,返回<code>true</code>,否则返回<code>false</code>。虽然此函数不是应用于表的,但这里仍收录了此函数以决定一个给定的键是否在表的数组部分或哈希部分。 == isNan == <syntaxhighlight lang="lua"> TableTools.isNan(value) </syntaxhighlight> 如果<code>''value''</code>是NaN值,返回<code>true</code>,否则返回<code>false</code>。虽然此函数不是应用于表的,但这里仍收录了此函数以决定一个值能否作为有效的键。(将NaN作为键会报错。) == shallowClone == <syntaxhighlight lang="lua"> TableTools.shallowClone(t) </syntaxhighlight> 返回表格的副本。返回的值是一个新表,但是所有的子表和函数都会共用。不会绕过元表,但返回的表自身不会带有元表。如需在创建新表时不共享子表格且要复制元表,可以使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.clone|mw.clone]]。 == removeDuplicates == <syntaxhighlight lang="lua"> TableTools.removeDuplicates(t) </syntaxhighlight> 从数组中返回重复值。此函数仅用于标准的数组,所有非正整数键的一律忽略,第一个<code>nil</code>后的值也会忽略。(对于包含<code>nil</code>的数组,可以先使用[[#compressSparseArray|compressSparseArray]]。)此函数尝试保护数组的顺序:有重复值时,仅保留最早出现的那个。例如,对于表{{code|code={5, 4, 4, 3, 4, 2, 2, 1}|lang=lua}},removeDuplicates返回{{code|code={5, 4, 3, 2, 1}|lang=lua}}。 == numKeys == <syntaxhighlight lang="lua"> TableTools.numKeys(t) </syntaxhighlight> 接收表<code>''t''</code>并以数字顺序返回拥有非nil值的正整数键的数量。例如,对于{{code|code={'foo', nil, 'bar', 'baz', a = 'b'}|lang=lua}},numKeys返回{{code|code={1, 3, 4}|lang=lua}}。 == affixNums == <syntaxhighlight lang="lua"> TableTools.affixNums(t, prefix, suffix) </syntaxhighlight> 接收表<code>''t''</code>并返回包含含有可选前缀<code>''prefix''</code>和可选后缀<code>''suffix''</code>的键的数量的数组。例如,对于表{{code|code={a1 = 'foo', a3 = 'bar', a6 = 'baz'}|lang=lua}}和前缀<code>'a'</code>,affixNums返回{{code|code={1, 3, 6}|lang=lua}}。<code>''prefix''</code>和<code>''suffix''</code>的值均按字面解释(不使用正则表达式)。 == numData == <syntaxhighlight lang="lua"> TableTools.numData(t, compress) </syntaxhighlight> 假如一个表有像foo1、bar1、foo2、baz2这样的键,返回如下格式的子表的表{{code|code={ [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }|lang=lua}}。不以整数结尾的键存储在命名为other的子表中。compress选项会压缩表以便通过ipairs迭代。 == compressSparseArray == <syntaxhighlight lang="lua"> TableTools.compressSparseArray(t) </syntaxhighlight> 接收一个带有一个或更多nil值的数组<code>''t''</code>,移除所有的nil值,不影响其他值的顺序,以便于安全地通过ipairs遍历。所有非正整数的键都会移除。例如,对于表{{code|code={1, nil, foo = 'bar', 3, 2}|lang=lua}},compressSparseArray返回{{code|code={1, 3, 2}|lang=lua}}。 == sparseIpairs == <syntaxhighlight lang="lua"> TableTools.sparseIpairs(t) </syntaxhighlight> 这是用于遍历稀疏数组<code>''t''</code>的迭代器函数。类似于[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#ipairs|ipairs]],但会一直迭代直到最高的数字键,而ipairs遇到第一个<code>nil</code>就可能会终止。忽略所有的非正整数键。 sparseIpairs常用于通用的<code>for</code>循环。 <syntaxhighlight lang="lua"> for i, v in TableTools.sparseIpairs(t) do -- 代码 end </syntaxhighlight> 注意sparseIpairs会在实现时使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#pairs|pairs]]。尽管一些键看上去被忽略,但实际上运行时也会遍历到。 == size == <syntaxhighlight lang="lua"> TableTools.size(t) </syntaxhighlight> 寻找“键/值对”表的大小。例如,对于{{code|code={foo = 'foo', bar = 'bar'}|lang=lua}},size返回<code>2</code>。函数也可以用于数组,但是对于数组,使用#操作符更高效。注意,为了查找表的大小,函数会使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#pairs|pairs]]函数以遍历所有的表键。 == keysToList == <syntaxhighlight lang="lua"> TableTools.keysToList(t, keySort) </syntaxhighlight> 返回表的键的列表,并按默认比较函数或者自定义<code>keySort</code>函数排序,与[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#table.sort|<code>table.sort</code>]]的<code>comp</code>函数类似。 == sortedPairs == <syntaxhighlight lang="lua"> TableTools.sortedPairs(t, keySort) </syntaxhighlight> 迭代表,并使用<code>keysToList</code>函数来排序键。如果只有数字键,<code>sparseIpairs</code>可能更高效。 == isArray == <syntaxhighlight lang="lua"> TableTools.isArray(t) </syntaxhighlight> 如果表中的所有键都是以<code>1</code>开始的接连不断的整数,返回true。 == listToSet == <syntaxhighlight lang="lua"> TableTools.listToSet(arr) </syntaxhighlight> 从表<code>arr</code>的数组部分创建一个集(set)。用<code>arr</code>的任何值来索引集都会返回<code>true</code>。 <syntaxhighlight lang="lua"> local set = TableTools.listToSet { "a", "b", "c" } assert(set["a"] == true) </syntaxhighlight> == invert == <syntaxhighlight lang="lua"> TableTools.invert(t) </syntaxhighlight> 交换数组中的键和值。例如,<code>invert{ "a", "b", "c" }</code>产生<code>{ a = 1, b = 2, c = 3 }</code>。 == deepCopy == <syntaxhighlight lang="lua"> TableTools.deepCopy(orig, noMetatable, alreadySeen) </syntaxhighlight> 返回表<code>orig</code>的副本,类似于<code>mw.clone</code>,所有非函数的值都会复制,并保留表的唯一性。如果<code>noMetatable</code>为<code>true</code>,则不会复制元表(如有)。可以复制由<code>mw.loadData</code>加载的表。 与<code>mw.clone</code>类似,但<code>mw.clone</code>不能够复制由<code>mw.loadData</code>加载的表,也不允许拒绝复制元表。 == sparseConcat == <syntaxhighlight lang="lua"> TableTools.sparseConcat(t, sep) </syntaxhighlight> 按顺序连接被正整数索引的表的所有值。 == length == <syntaxhighlight lang="lua"> TableTools.length(t) </syntaxhighlight> 查找数组的长度,或者带有像data1、data2这样的键的准数组。使用[[指数搜索]]算法以查找长度,以便于尽可能少地使用表查找(table lookup)。 对于准数组,此算法对使用元表的数组有用(例如[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#frame.args|frame.args]])。对于正常数组,只需要使用[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Length operator|#操作符]],因为#操作符是由[[C语言]]实现的,速度更快。 == inArray == <syntaxhighlight lang="lua"> TableTools.inArray(arr, valueToFind) </syntaxhighlight> 如果<code>valueToFind</code>是数组<code>arr</code>的成员,返回<syntaxhighlight lang="lua" inline>true</syntaxhighlight>,否则返回<syntaxhighlight lang="lua" inline>false</syntaxhighlight>。 <includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|| [[Category:维基百科元模块|TableTools]] }}</includeonly>
返回
Module:TableTools/doc
。
查看“︁Module:TableTools/doc”︁的源代码
来自大天使虫洞百科