6.6 – 表处理

这个库提供了表处理的通用函数。所有函数都放在表 table 中。

记住,无论何时,若一个操作需要取表的长度,这张表必须是一个真序列,或是拥有 __len 元方法(参见 §3.4.7 )。所有的函数都忽略传入参数的那张表中的非数字键。


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

提供一个列表,其所有元素都是字符串或数字,返回字符串list[i]..sep..list[i+1] ··· sep..list[j]sep 的默认值是空串,i 的默认值是 1 ,j 的默认值是 #list 。如果 ij 大,返回空串。


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

list 的位置 pos 处插入元素 value ,并后移元素 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]a2 的默认值为 a1。目标区间可以和源区间重叠。索引 f 必须是正数。


table.pack (···)

返回用所有参数以键 1,2, 等填充的新表,并将 "n" 这个域设为参数的总数。注意这张返回的表不一定是一个序列。


table.remove (list [, pos])

移除 listpos 位置上的元素,并返回这个被移除的值。当 pos 是在 1 到 #list 之间的整数时,它向前移动元素 list[pos+1], list[pos+2], ···, list[#list]并删除元素 list[#list];索引 pos 可以是 #list + 1 ,或在 #list 为 0 时可以是 0 ;在这些情况下,函数删除元素 list[pos]

pos 默认为 #list,因此调用 table.remove(l) 将移除表 l 的最后一个元素。


table.sort (list [, comp])

在表内从 list[1]list[#list] 原地 对其间元素按指定次序排序。如果提供了 comp ,它必须是一个可以接收两个列表内元素为参数的函数。当第一个元素需要排在第二个元素之前时,返回真(因此 not comp(list[i+1],list[i]) 在排序结束后将为真)。如果没有提供 comp,将使用标准 Lua 操作 < 作为替代品。

排序算法并不稳定;即当两个元素次序相等时,它们在排序后的相对位置可能会改变。


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

返回列表中的元素。这个函数等价于

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

i 默认为 1 ,j 默认为 #list