打开/关闭搜索
搜索
打开/关闭菜单
1
70
从零开始
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
讨论
贡献
创建账号
登录
编辑“︁
模块:TableTools/doc
”︁
来自从零开始
查看
阅读
编辑源代码
查看历史
associated-pages
模块
讨论
更多操作
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{NoteTA|G1=IT}} 本模块包含一系列用于处理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.clone。 == shallowCloneArray == <syntaxhighlight lang="lua"> TableTools.shallowCloneArray(t) </syntaxhighlight> 返回数组的副本。返回的值是一个新的数组类似于<code>shallowClone</code>,但是只会复制数组部分。 == rawShallowClone == <syntaxhighlight lang="lua"> TableTools.rawShallowClone(t) </syntaxhighlight> 类似于<code>TableTools.shallowClone</code>,但是迭代时会绕过<code>__pairs</code>元表。 == appendAll == <syntaxhighlight lang="lua"> TableTools.appendAll(t, anotherArray) </syntaxhighlight> 在数组t的末尾添加数组anotherArray的所有内容。会修改t,不返回值。 == 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}}。 == allNumKeys == <syntaxhighlight lang="lua"> TableTools.allNumKeys(t) </syntaxhighlight> 类似于<code>numKeys</code>,但是不限于正整数。 == 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>的值均按字面解释(不使用正则表达式)。 == allAffixNums == <syntaxhighlight lang="lua"> TableTools.allAffixNums(t, prefix, suffix) </syntaxhighlight> 类似于<code>affixNums</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迭代。 == allPrefixedNumKeys == <syntaxhighlight lang="lua"> TableTools.allPrefixedNumKeys(t, pattern) </syntaxhighlight> 假设有{{code|code={a1 = 'a1', a2 = 'a2', a3 = 'a3', b1 = 'b1', b2 = 'b2'}|lang=lua}}这样的表,返回{{code|code={a = {'a1', 'a2', 'a3'}, b = {'b1', 'b2'} }|lang=lua}}这样的表。非以数字结尾的表会被忽略,且该表的子表可能是稀疏数组。 pattern用于指定正则表达式匹配。例如,若<code>pattern</code>为<code>'^(category)(.+)$'</code>只会匹配以“<tt>category</tt>”开头,任意数字(可以是小数、负数)结尾的部分。这个正则表达式需要捕获两个值,第一个值是前缀,即返回的表的键,第二个值是可能是数字的部分,应当有可能用tonumber转化为数字。 == 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}}。 == compressExtendedSparseArray == <syntaxhighlight lang="lua"> TableTools.compressExtendedSparseArray(t) </syntaxhighlight> 类似于<code>compressSparseArray</code>,但是不会移除非正整数键和小数键。 == sparseIpairs == <syntaxhighlight lang="lua"> TableTools.sparseIpairs(t) </syntaxhighlight> 这是用于遍历稀疏数组<code>''t''</code>的迭代器函数。类似于ipairs,但会一直迭代直到最高的数字键,而ipairs遇到第一个<code>nil</code>就可能会终止。忽略所有的非正整数键。 sparseIpairs常用于通用的<code>for</code>循环。 <syntaxhighlight lang="lua"> for i, v in TableTools.sparseIpairs(t) do -- 代码 end </syntaxhighlight> 注意sparseIpairs会在实现时使用pairs。尽管一些键看上去被忽略,但实际上运行时也会遍历到。 == extendedSparseIpairs == <syntaxhighlight lang="lua"> TableTools.extendedSparseIpairs(t) </syntaxhighlight> 类似于<code>sparseIpairs</code>,但是不会忽略非正整数键和小数键。 == size == <syntaxhighlight lang="lua"> TableTools.size(t) </syntaxhighlight> 寻找“键/值对”表的大小。例如,对于{{code|code={foo = 'foo', bar = 'bar'}|lang=lua}},size返回<code>2</code>。函数也可以用于数组,但是对于数组,使用#操作符更高效。注意,为了查找表的大小,函数会使用pairs函数以遍历所有的表键。 == rawSize == <syntaxhighlight lang="lua"> TableTools.rawSize(t) </syntaxhighlight> 类似于<code>size</code>,但是会忽略<code>__pairs</code>元方法。 == keysToList == <syntaxhighlight lang="lua"> TableTools.keysToList(t, keySort) </syntaxhighlight> 返回表的键的列表,并按默认比较函数或者自定义<code>keySort</code>函数排序,与<code>table.sort</code>的<code>comp</code>函数类似。 == rawKeysToList == <syntaxhighlight lang="lua"> TableTools.rawKeysToList(t, keySort) </syntaxhighlight> 类似于<code>keysToList</code>,但是会忽略<code>__pairs</code>元方法。 == sortedPairs == <syntaxhighlight lang="lua"> TableTools.sortedPairs(t, keySort) </syntaxhighlight> 迭代表,并使用<code>keysToList</code>函数来排序键。如果只有数字键,<code>sparseIpairs</code>可能更高效。 该函数不能作为表的<code>__pairs</code>元方法,否则会出现堆栈溢出。 == rawSortedPairs == <syntaxhighlight lang="lua"> TableTools.rawSortedPairs(t, keySort) </syntaxhighlight> 类似于<code>rawSortedPairs</code>,但是会忽略<code>__pairs</code>元方法,可以作为表的<code>__pairs</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)。 对于准数组,此算法对使用元表的数组有用(例如frame.args)。对于正常数组,只需要使用#操作符,因为#操作符是由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> [[Category:求闻百科元模块]] </includeonly>
摘要:
请注意,所有对从零开始的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
项目:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面嵌入的页面:
模板:CGroup/list
(
编辑
)
模板:Code
(
编辑
)
模板:Lua
(
编辑
)
模板:Mbox
(
编辑
)
模板:NoteTA
(
编辑
)
模板:NoteTA/TemplateData
(
编辑
)
模板:Sandbox other
(
编辑
)
模板:Seealso
(
编辑
)
模板:Tlx
(
编辑
)
模板:字詞轉換索引
(
编辑
)
模块:Arguments
(
编辑
)
模块:Category handler
(
编辑
)
模块:Message box
(
编辑
)
模块:Message box/configuration
(
编辑
)
模块:Yesno
(
编辑
)
编辑“︁
模块:TableTools/doc
”︁
来自从零开始