table库函数

table库函数

table.concat(table, sep,  start, end)

concat是concatenate(连锁, 连接)的缩写,table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素,元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符,start的默认值是1,end的默认值是数组部分的总长。

sep, start, end这三个参数是顺序读入的,所以虽然它们都不是必须参数,但如果要指定靠后的参数, 必须同时指定前面的参数.

tbl = {"alpha", "beta", "gamma"}
print(table.concat(tbl, ":"))
-- alpha:beta:gamma
print(table.concat(tbl, nil, 1, 2))
--alphabeta
print(table.concat(tbl, "\n", 2, 3))
--beta
--gamma

table.insert(table, pos, value)

table.insert()函数在table的数组部分指定位置(pos)插入值为value的一个元素。 pos参数可选,默认为数组部分末尾.

tbl = {"alpha", "beta", "gamma"}
table.insert(tbl, "delta")
table.insert(tbl, "epsilon")
print(table.concat(tbl, ", ")
--alpha, beta, gamma, delta, epsilon
table.insert(tbl, 3, "zeta")
print(table.concat(tbl, ", ")
--alpha, beta, zeta, gamma, delta, epsilon


table.maxn(table)

table.maxn()函数返回指定table中所有正数key值中最大的key值。 如果不存在key值为正数的元素,则返回0。此函数不限于table的数组部分。

tbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"}
print(#tbl)
-- 3,因为26和之前的数字不连续, 所以不算在数组部分内
print(table.maxn(tbl))
--26
tbl[91.32] = true
print(table.maxn(tbl))
--91.32

table.remove(table, pos)

table.remove()函数删除并返回table数组部分位于pos位置的元素。 其后的元素会被前移,pos参数可选, 默认为table长度。即从最后一个元素删起。

table.sort(table, comp)

table.sort()函数对给定的table进行升序排序.

tbl = {"alpha", "beta", "gamma", "delta"}
table.sort(tbl)
print(table.concat(tbl, ", "))
--alpha, beta, delta, gamma

comp是一个可选的参数,此参数是一个外部函数,可以用来自定义sort函数的排序标准。

此函数应满足以下条件:接受两个参数(依次为a, b), 并返回一个布尔型的值,当a应该排在b前面时,返回true,反之返回false。

例如, 当我们需要降序排序时, 可以这样写:

sortFunc = function(a, b) return b < a end
table.sort(tbl, sortFunc)
print(table.concat(tbl, ", "))
--gamma, delta, beta, alpha

用类似的原理还可以写出更加复杂的排序函数。例如, 有一个table存有工会三名成员的姓名及等级信息:

guild = {}

table.insert(guild, {
 name = "Cladhaire",
 class = "Rogue",
 level = 70,
})

table.insert(guild, {
 name = "Sagart",
 class = "Priest",
 level = 70,
})

table.insert(guild, {
 name = "Mallaithe",
 class = "Warlock",
 level = 40,
})

对这个table进行排序时,应用以下的规则:按等级升序排序,在等级相同时,按姓名升序排序。

可以写出这样的排序函数:

function sortLevelNameAsc(a, b)
 if a.level == b.level then
  return a.name < b.name
 else
  return a.level < b.level
 end
end

测试功能如下:

table.sort(guild, sortLevelNameAsc)
for idx, value in ipairs(guild) do print(idx, value.name) end
--1, Mallaithe
--2, Cladhaire
--3, Sagart

table.foreachi(table, function(i, v))
会期望一个从 1(数字 1)开始的连续整数范围,遍历table中的key和value逐对进行function(i, v)操作

t1 = {2, 4, 6, language="Lua", version="5", 8, 10, 12, web="hello lua"};
table.foreachi(t1, function(i, v) print (i, v) end) ; --等价于foreachi(t1, print)

输出结果:

1 2
2 4
3 6
4 8
5 10
6 12

table.foreach(table, function(i, v))
与foreachi不同的是,foreach会对整个表进行迭代

t1 = {2, 4, 6, language="Lua", version="5", 8, 10, 12, web="hello lua"};
table.foreach(t1, function(i, v) print (i, v) end) ;

输出结果:

1 2
2 4
3 6
4 8
5 10

6 12

web hello lua
language Lua
version 5

table.getn(table)
返回table中元素的个数

t1 = {1, 2, 3, 5};
print(getn(t1))
--4

table.setn(table, nSize)

设置table中的元素个数

时间: 2024-10-11 03:28:21

table库函数的相关文章

Lua的table库函数insert、remove、concat、sort详细介绍

函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j]]]) table.sort(table[, comp]) 1. insert 和 remove 只能用于数组元素的插入和移出, 进行插入和移出时,会将后面的元素对齐起来. 所以在 for 循环中进行 insert 和 remove 的时候要注意插入和移除时是否漏掉了某些项: local t = {

lua中table 库函数 insert、remove、concat、sort的简单使用【简记】

1.insert  1 do 2 t1 = {"欲", "泪", "成", "雪"} 3 table.insert(t1,"seeyou")-- 往t1末尾插入元素 "seeyou" 4 table.insert(t1, 3, "bug")-- 往t1索引为3的位置插入元素"bug" 5 for i,v in ipairs(t1) do print

lua学习之table类型

关系表类型,这是一个很强大的类型.我们可以把这个类型看作是一个数组.只是 C语言的数组,只能用正整数来作索引: 在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil.同样,在C语言中,数组的内容只允许一种类型:在 Lua中,你也可以用任意类型的值来作数组的内容,nil也可以. 基本介绍 注意三点:  第一,所有元素之间,总是用逗号 "," 隔开: 第二,所有索引值都需要用 "["和"]" 括起来:如果是字符串,还可以去掉引号和中

Lua 学习笔记(十)数据结构

在Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础.其他语言提供的数据结构,如数组.记录.线性表.队列.集合等,在Lua中都可以通过table来表示.而且使用Lua实现这些数据结构的效率高. 一.数组 在Lua中数组没有固定的大小,可以根据需要增加长度.当初始化数组时,也就间接的定义了它的大小. 二.矩阵与多维数组 在Lua中,有两种方式来表示矩阵,一种是使用一个“数组的数组”,也就是数组中的元素是数组.另一种方式就是合并索引的方式,合并索引也有两种方式,加入索引分隔符和

Lua1.0 代码分析 table.c

转载出处:http://my.oschina.net/xhan/blog/307961 table.c 代码分析 全局符号,常量,字符串,关联数组,文件列表的定义. 全局符号: 初始有 5 个基本的符号,Lua 预设的函数和库函数都注册在里面. 常量: 初始的几个常量是 Lua 中 type 的名字. 字符串表,关联数组表,文件列表 所有的这些在 table.c 中定义的这些数组可以认为是 Lua 的全局注册表空间,Lua 的环境. 函数分析 ? 1 2 3 4 5 6 7 8 9 10 11

Lua 常用库函数

一.数学库 1. 随机数 math.randomseed(os.time());   -- 设置随机种子 for i=1, 100 do print(math.random(-1000,1000));   -- 随机区间 [-1000,1000], math.random(1000) 表示 [1,1000] end; 2. 最大,最小值 math.max   math.min 二.table 库 1. 插入和删除 a = {10,20,30}; print(unpack(a)); table.i

C++调用C语言的库函数

在项目中,使用C语言编写了一个socket后台程序tkcofferd,并且为方便客户端的使用,提供了动态库,其中包含socket接口. 现在的需求是使用qt做一个前端界面,用来展示tkcofferd的socket接口功能,用于测试目的. qt中使用c++语言编写,如果需要调用tkcofferd的socket接口(由C语言编写),需要指明函数导出方式,详述如下: 转自http://linhs.blog.51cto.com/370259/140927 C++调用C的库函数时,如果头文件定义得不恰当,

STM32_GPIO配置及库函数讲解——独立按键

STM32_GPIO配置及库函数讲解——独立按键 2013-02-26 13:21:30|  分类: STM32F103VBT6 |  标签:stm32_gpio_key  |举报|字号 订阅 User Button硬件连接如下图所示:当按键被按下,PB9检测到低电平,相反PB9被3.3V电源拉高. LED硬件连接如下图所示:高电平点亮LED. 要想将PB9管脚配置成输入模式,程序所需如下步骤:(必须的) 第一步:配置系统时钟.见STM32F103x RCC寄存器配置 除此之外,还需将GPIO外

快速掌握Lua 5.3 —— 编写提供给Lua使用的C库函数的技巧 (2)

Q:什么是"registry"? A:有时候,我们需要在程序中使用一些非局部的变量.在C中我们可以使用全局变量或是静态变量来实现,而在为Lua编写C库的过程中,使用以上类型的变量并不是一个好的方式.首先,这些变量中无法存储Lua的值.其次,这些变量如果在多个Lua状态机中被使用,则很可能造成非预期的结果. 一个替代方案是,将这些值存储在Lua的全局变量中.这种方式解决了上面提到的两个问题,Lua全局变量可以存储任何Lua的值,同时每一个Lua状态机都有自己独立的一套全局变量.但这依旧不