lua中table的遍历,以及删除

摘要:
valueinpairs(tab3)doprint(value)-->#(table)仅在键为1的位置开始,#(tab1)doprint(tab1[i])-->}Print(“#table:#(tab3)doprint(tab3[i])-->table.maxn(table)表示获取表中最大值的键。[”a“]=4,}Print(”table.maxn:

Lua 内table遍历

在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是:

1. ipairs

for index, value in ipairs(table) do

end

注:这种方式的遍历只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历,无论后面是否仍然是顺序的key。

 1 --Sample_1:
 2 local tab1 = 
 3 {
 4 [1] = 1,
 5 [2] = 2,
 6 [3] = 3,
 7 [4] = 4,
 8 }
 9 for key, value in ipairs(tab1) do
10   print(value)    -->1 2 3 4
11 end
--Sample_2:
local tab2 = 
{
    [1] = 1,
    [2] = 2,
    [3] = 3,
    [5] = 5,
    [6] = 6,
}
for key, value in ipairs(tab2) do
    print(value)    -->1 2 3
end
--Sample_3:
local tab3 = 
{
    [2] = 2,
    [3] = 3,
    [4] = 4,
}
for key, value in ipairs(tab3) do
    print(value)    -->没有打印
end

2. pairs

for key, value in pairs(table) do

end

这种方式的遍历是根据table中key的hash值排列的顺序来遍历,并非是table中key的排列顺序,并且不关心key是否从1开始和key是否以1递增。

--Sample_1:
local tab1 = 
{
    [1] = 1,
    [2] = 2,
    [3] = 3,
    [4] = 4,
}
 
for key, value in pairs(tab1) do
    print(value)    -->1 2 4 3
end
--Sample_2:
local tab2 = 
{
    [1] = 1,
    [2] = 2,
    [3] = 3,
    [5] = 5,
    [6] = 6,
}
for key, value in pairs(tab2) do
    print(value)    -->6 2 3 1 5
end
--Sample_3:
local tab3 = 
{
    ["1"] = 1,
    ["2"] = 2,
    ["3"] = 3,
    ["5"] = 5,
    ["6"] = 6,
}
for key, value in pairs(tab3) do
    print(value)    -->1 3 2 5 6
end

3. #table

for i=1, #(table) do

end

注:这种方式的遍历关键的地方在于获取table的大小,#(table)只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历并且返回table的大小,无论后面是否仍然是顺序的key。

--Sample_1:
local tab1 = 
{
    [1] = 1,
    [2] = 2,
    [3] = 3,
    [4] = 4,
}
 
print("#table:"..#(tab1))        -->4
for i = 1, #(tab1) do
    print(tab1[i])    -->1 2 3 4
end
 
--Sample_2:
local tab2 = 
{
    [1] = 1,
    [2] = 2,
    [3] = 3,
    [5] = 5,
    [6] = 6,
}
 
print("#table:"..#(tab2))    -->3
for i = 1, #(tab2) do
    print(tab2[i])
end
--Sample_3:
local tab3 = 
{
    [2] = 2,
    [3] = 3,
    [4] = 4,
}
 
print("#table:"..#(tab3))    -->0
for i = 1, #(tab3) do
    print(tab3[i])    -->没有打印
end

4. table.maxn(table)

  这种方式的遍历和第三种方式差不多,关键的地方是在table.maxn(table),table.maxn(table)的意思是获取table中最大值的key。 

local tab2 = 
{
    [1] = 1,
    [2] = 2,
    [3] = 3,
    ["a"] = 4,
    [5] = 5,
    [6] = 6,
}
 
print("table.maxn:"..table.maxn(tab2))    -->6
for i = 1, table.maxn(tab2) do
    print(tab2[i])    -->1 2 3 nil 5 6
end
--Sample_2:
local tab3 = 
{
    [2] = 2,
    [3] = 3,
    [4] = 4,
}
 
print("table.maxn:"..table.maxn(tab3))    -->4
for i = 1, table.maxn(tab2) do
    print(tab3[i])    -->nil 2 3 4 nil nil
end

Lua table移除某一项,或多项内容

  有两种方式来移除table中的数据

1. 按下标来移除

  table.remove(table_name, [pos,])
  直接移除某个下标的数据,例如:

local t = {5, 6, 7, 8}
table.remove(t, 2)
for k, v in pairs(t) do
    print(k, v)
end
输出
1     5
2     7
3     8

2.将某项值置空

  table[k] = nil  直接将某项值置空

  

local a = {
    ['3019'] = 3019,
    ['3020'] = 3020,
    ['3021'] = 3021,
    ['3017'] = 3017
}

a['3019'] = nil

for k, v in pairs(a) do
    print(k, v)
end

输出:
3020    3020
3017    3017
3021    3021

免责声明:文章转载自《lua中table的遍历,以及删除》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server 查询优化器运行方式mybatis批量新增报错 BadSqlGrammarException下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Avue-curd通用模板(二)

目录 Avue-curd通用模板 1、增加路由菜单 2、通用模板 3、踩坑 4、表格空数据样式 Avue-curd通用模板 上一篇已经把所有使用Avue的准备工作做好了,下面就通过一个简单的例子来体验一下avue能带给我们的便利。 1、增加路由菜单 在 src/router/index.js,增加一个路由(由于这只是用来测试学习的,所以放在了...

WPF 读写XML文件

程序集整体框架如下:  其中XmlReader类如下: using System; using System.Collections.Generic; using System.Text; using System.Xml; namespace WpfApp4 { public class XmlReader { pr...

sql语句的join用法

sql的join分为三种,内连接、外连接、交叉连接。 以下先建2张表,插入一些数据,后续理解起来更方便一些。 create table emp(empno int, name char(20),depart int);create table depart(dpno int,dpname char(20));insert into emp values (...

[转] oracle 监听

oracle 监听 启动监听:lsnrctl start 查看监听:lsnrctl status 停止监听:lsnrctl stop 1、oracle 数据服务器包括:实例进程和数据库;    实例进程包括:memory structure(sga)以及background process(pmon(进程监控)、smon(系统监控system monito...

TP6 学习-路由操作

ThinkPHP-路由 by:Mirror王宇阳 Thinkphp的路由的主要作用是为了让URL地址更加美观、简洁、优雅……;设置路由对URL的检测、验证等操作提供了极大的便利性;路由功能是默认开启的config/app.php文件中设置: 'with_route' => true; 路由配置文件:config/route.php 路由定义文件:...

oracle clob与nclob的互相转换

drop table clobTets create table clobTets( col1 nclob ) select * from clobTets insert into clobTets values('11111') alter table clobTets add (col2 varchar2(4000)) update c...