Skip to content

6.6 - 表操作

本库提供了对表进行操作的通用函数,所有提供的函数都放在名为 table 的表中。

请记住,对于任何需要表长度的操作,之前说的取长操作符相关的规则都适用(参见3.4.7)。所有的函数都会忽略给出的表中的非数字键。

table.concat (list [, sep [, i [, j]]])

给定一个列表,其所有的元素都是字符串或数字,返回等效于 list[i]..sep..list[i+1] ··· sep..list[j] 的结果。参数 sep 默认为空字符串,i 默认为1,j 默认等于 #list 。如果 i 大于 j ,则返回空字符串。

table.insert (list, [pos,] value)

将 value 作为元素插入到列表 list 中的 pos 位置,顺移后边的元素 list[pos], list[pos+1], ···, list[#list] 。参数 pos 默认等于 #list+1 ,因此 table.insert(t,x) 会将 x 插入到列表 t 中。

table.move (a1, f, e, t [,a2])

将表 a1 中的元素移入到表 a2 中,等效于执行多重赋值:a2[t],··· = a1[f],···,a1[e] ,所以当 a1 和 a2 不是同一个表时,a1 是不会发生变动的。其中参数 a2 默认等于 a1 。目标范围可以和源范围重叠。要移动的下标的值在Lua中必须是个整数。

返回目标表 a2。

table.pack (···)

返回一个新表,其先后将所接收到的所有参数存储到数字键 1、2、3……等等中,并将参数数量作为字段 "n" 的值。 要注意,当有些参数值为nil时,其返回的表不一定是个序列。

table.remove (list [, pos])

移除列表 list 中位于 pos 的元素,返回被移除的元素的值。当 pos 的值处于1到 #list 之间时,会先后顺移后边的元素 list[pos+1], list[pos+2], ···, list[#list] 并且移除元素 list[#list];当 #list 为0时参数 pos 可以为0,也可以为 #list + 1 。

参数 pos 默认等于 #list ,因此调用 table.remove(l) 会移除列表 l 中的最后一个元素。

table.sort (list [, comp])

将列表中从 list[1] 到 list[#list] 的元素按照给出的顺序就地排序。如果给出了参数 comp ,其必须是一个函数,该接收两个列表元素,并判断两个元素的相对位置,如果需要第一个元素在第二个元素之前,则返回true,因此在排完序后,对于索引 i <= j ,comp(list[i], list[j]) 的结果为真。如果参数 comp 未给出,那么会使用Lua标准操作符 < 代替。

函数 comp 必须定义一个绝对的顺序;更正式的说法是,该函数必须排序稳定。(弱排序看似是个完整的排序,但它可能在比较中认为两个不同的元素相等。)

排序逻辑不稳定的意思是:两个在次序上相等的不同元素,在排序完成后可能会使得两个元素的相对位置发生改变。

table.unpack (list [, i [, j]])

依次返回给定列表中的元素。该函数等效于:

lua
return list[i], list[i+1], ···, list[j]

参数 i 默认为,j 默认等于 #list 。