Lua语言中的table可以用来解决模块、包和对象,相对于其他语言table的索引下标是从1开始的,而不是0。
table(表)构造
最简单的构造函数是{},可以用来创建一个空表,可以直接初始化一个数组:
---创建空的表
local mytable = {}
---指定值
mytable[1] = "Hello Lua"
---清空
mytable = nil
table 函数操作
方法 | 说明 |
---|---|
table.concat (table [, sep [, i [, j ] ] ]) | sep为填充字符,默认为空白,将table[i]到table[j]连城字符串 |
table.insert (table, [pos ,] value) | tablede 的pos位置插入value值 |
table.maxn (table) | 指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0 (Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现) |
table.remove (table [, pos]) | 删除table中pos位置的元素,默认值为表的长度即删除最后一个 若删除的是中间位置,则其后的索引值都会减一 |
table.sort (table [, comp]) | 对table进行升序排列 |
下面对上边的操作函数分别举例说明:
- table.concat (table [, sep [, i [, j ] ] ])连接
local mytable = {"hello","lua","ceshi"}
print(table.concat(mytable,"--"))
-----输出结果------
hello--lua--ceshi
- table.insert (table, [pos ,] value)插入新元素
local mytable = {"hello","lua","ceshi"}
table.insert(mytable , "sport")
print(table.concat(mytable, "|"))
-----输出结果------
hello|lua|ceshi|sport
- table.maxn (table) 获取最大值
Lua5.2后已删除,所以重新写了一个方法供参考,注意只是数字类型的可以使用。
function table_maxn(t)
local tmp=nil;
for k, v in pairs(t) do
if(tmp==nil) then
tmp=v
end
if tmp < v then
tmp = v
end
end
return tmp
end
tbl = {[1] = 10, [2] = 100, [3] = 60, [26] =50}
print("tbl 最大值:", table_maxn(tbl))
-----输出结果------
tbl 最大值: 100
- table.remove (table [, pos]) 删除指定位置元素
local mytable = {"hello","lua","ceshi"}
table.remove(mytable)
print(table.concat(mytable,"-"))
-----输出结果------
hello-lua
- table.sort (table [, comp])排序
local mytable = {[1] = 10, [2] = 100, [3] = 60, [4] =50}
table.sort(mytable)
print("table 排序:", table.concat(mytable,"-"))
-----输出结果------
table 排序: 10-50-60-100
table其他说明
table的长度可以使用#获取。
local mytable = {[1] = 10, [2] = 100, [3] = 60, [4] =50}
print("table 长度" , #mytable)
-----输出结果------
table 长度 4
注意:使用#获取table长度时主要遇到不连续的索引则中断,所以使用时要注意连续
local mytable = {[1] = 10, [2] = 100, [3] = 60, [5] =50}
print("table 长度" , #mytable)
-----输出结果------
table 长度 3
以上示例长度变为3,因为最后一个元素索引为5与前边不连续。