Lua 内table遍历

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

1. ipairs

for index, value in ipairs(table) do

end

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

 --Sample_1:
local tab1 =
{
[] = ,
[] = ,
[] = ,
[] = ,
}
for key, value in ipairs(tab1) do
  print(value) -->1 2 3 4
end
--Sample_2:
local tab2 =
{
[] = ,
[] = ,
[] = ,
[] = ,
[] = ,
}
for key, value in ipairs(tab2) do
print(value) -->1 2 3
end
--Sample_3:
local tab3 =
{
[] = ,
[] = ,
[] = ,
}
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 =
{
[] = ,
[] = ,
[] = ,
[] = ,
} for key, value in pairs(tab1) do
print(value) -->1 2 4 3
end
--Sample_2:
local tab2 =
{
[] = ,
[] = ,
[] = ,
[] = ,
[] = ,
}
for key, value in pairs(tab2) do
print(value) -->6 2 3 1 5
end
--Sample_3:
local tab3 =
{
[""] = ,
[""] = ,
[""] = ,
[""] = ,
[""] = ,
}
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 =
{
[] = ,
[] = ,
[] = ,
[] = ,
} print("#table:"..#(tab1)) -->4
for i = , #(tab1) do
print(tab1[i]) -->1 2 3 4
end --Sample_2:
local tab2 =
{
[] = ,
[] = ,
[] = ,
[] = ,
[] = ,
} print("#table:"..#(tab2)) -->3
for i = , #(tab2) do
print(tab2[i])
end
--Sample_3:
local tab3 =
{
[] = ,
[] = ,
[] = ,
} print("#table:"..#(tab3)) -->0
for i = , #(tab3) do
print(tab3[i]) -->没有打印
end

4. table.maxn(table)

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

local tab2 =
{
[] = ,
[] = ,
[] = ,
["a"] = ,
[] = ,
[] = ,
} print("table.maxn:"..table.maxn(tab2)) -->6
for i = , table.maxn(tab2) do
print(tab2[i]) -->1 2 3 nil 5 6
end
--Sample_2:
local tab3 =
{
[] = ,
[] = ,
[] = ,
} print("table.maxn:"..table.maxn(tab3)) -->4
for i = , 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 = {, , , }
table.remove(t, )
for k, v in pairs(t) do
print(k, v)
end
输出

2.将某项值置空

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

  

local a = {
[''] = ,
[''] = ,
[''] = ,
[''] =
} a[''] = nil for k, v in pairs(a) do
print(k, v)
end 输出:

lua中table的遍历,以及删除的更多相关文章

  1. lua中 table 元表中元方法的重构实现

    转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...

  2. lua中 table 重构index/pairs元方法优化table内存占用

    转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...

  3. lua中 table.getn(t) 、#t、 table.maxn(t) 这三个什么区别?

    lua中 table.getn(t) .#t. table.maxn(t) 这三个什么区别? RTlocal t = {1,888,x= 999,b=2,5,nil,6,7,[10]=1,8,{z = ...

  4. lua中table如何安全移除元素

    在Lua中,table如何安全的移除元素这点挺重要,因为如果不小心,会没有正确的移除,造成内存泄漏. 引子 比如有些朋友常常这么做,大家看有啥问题 将test表中的偶数移除掉local test = ...

  5. Lua中table的实现-《Lua设计与实现》

    本文来自<Lua设计与实现>的阅读笔记,推荐Lua学习者可以购买一本,深入浅出讲解lua的设计和实现原理,很赞,哈哈   Lua中对于表的设计,是基于数组和散列表,和其他语言不同,对于数组 ...

  6. Java中ArrayList循环遍历并删除元素的陷阱

    ava中的ArrayList循环遍历并且删除元素时经常不小心掉坑里,昨天又碰到了,感觉有必要单独写篇文章记一下. 先写个测试代码: import java.util.ArrayList; public ...

  7. C++对Lua中table进行读取、修改和创建

    C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...

  8. Lua中Table的学习

    --table 是 Lua 的一种数据结构,用来帮助我们创建不同的数据类型,如:数组.字典等 --Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例 ...

  9. lua中table的常用方法

    转载:https://blog.csdn.net/Fenglele_Fans/article/details/83627021 1:table.sort() language = {"lua ...

随机推荐

  1. Unity容器的简单AOP与DI的应用Demo(基于asp.net mvc框架)

    转发请注明出处:https://home.cnblogs.com/u/zhiyong-ITNote/ 整个Demo是基于Controller-Service-Repository架构设计的,每一层之间 ...

  2. 2110 ACM Crisis of HDU 母函数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2110 题意:分出1/3的价值,有几种可能? 思路:母函数 与之前的题目2079相似,复习笔记再来写代码: ...

  3. 2153 ACM 仙人球的残影 输出格式

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2153 中文题目,很简单,但是要注意输出格式,题目中三个字符长度 输出格式:%3d (整数) 思路:将输出看 ...

  4. php 生成xml文件

    <?php class Xml{        /*      *  $aData     要格式化的数组      *  $path      xml信息要写入的文件路径     *  $ve ...

  5. vue父页面给子页面传递数据

    父页面: <template> <div>{{msg}} <Son title='向子文件传递数据' :data='data' :lifemsg ='lifemsg' : ...

  6. acm--博弈入门2(P/N分析)--(HDU 1847 HDU 2188 HDU 3863)

    P/N理论 分析博弈时可以用P/N分析法 具体如下: P点:即必败点,某玩家位于此点,只要对方无失误,则必败: N点:即必胜点,某玩家位于此点,只要自己无失误,则必胜. 必败态:一定输 必胜态:一定赢 ...

  7. python中 is 和 == 的区别

    is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象是否相等.

  8. MySQL(九)

    封装 观察前面的文件发现,除了sql语句及参数不同,其它语句都是一样的 创建MysqlHelper.py文件,定义类 #encoding=utf8 import MySQLdb class Mysql ...

  9. Django——邮件发送

    在settings中添加关键信息 EMAIL_HOST = 'smtp.qq.com' #不同的邮箱有不同的发件地址(收件地址) EMAIL_PORT = 25 #smtp端口号 EMAIL_HOST ...

  10. yii2 配合bootstrap添加按钮

    新增一个按钮 1.bootstrap 官网:http://getbootstrap.com/ 2.bootstrap 中文官网:http://v3.bootcss.com/ 在视图文件中: <? ...