lua中table的遍历,以及删除
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的遍历,以及删除的更多相关文章
- lua中 table 元表中元方法的重构实现
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...
- lua中 table 重构index/pairs元方法优化table内存占用
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...
- 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 = ...
- lua中table如何安全移除元素
在Lua中,table如何安全的移除元素这点挺重要,因为如果不小心,会没有正确的移除,造成内存泄漏. 引子 比如有些朋友常常这么做,大家看有啥问题 将test表中的偶数移除掉local test = ...
- Lua中table的实现-《Lua设计与实现》
本文来自<Lua设计与实现>的阅读笔记,推荐Lua学习者可以购买一本,深入浅出讲解lua的设计和实现原理,很赞,哈哈 Lua中对于表的设计,是基于数组和散列表,和其他语言不同,对于数组 ...
- Java中ArrayList循环遍历并删除元素的陷阱
ava中的ArrayList循环遍历并且删除元素时经常不小心掉坑里,昨天又碰到了,感觉有必要单独写篇文章记一下. 先写个测试代码: import java.util.ArrayList; public ...
- C++对Lua中table进行读取、修改和创建
C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...
- Lua中Table的学习
--table 是 Lua 的一种数据结构,用来帮助我们创建不同的数据类型,如:数组.字典等 --Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例 ...
- lua中table的常用方法
转载:https://blog.csdn.net/Fenglele_Fans/article/details/83627021 1:table.sort() language = {"lua ...
随机推荐
- XamarinAndroid组件教程RecylerView适配器动画动画种类
XamarinAndroid组件教程RecylerView适配器动画动画种类 本节将讲解RecylerView适配器动画,其中包含动画种类和如何使用动画. 动画种类 RecylerViewAnimat ...
- Cisco 12系列 AP 初始化配置-2-初始化配置
用于SSH登陆这个设备 bridge irb bridge 1 route ip 开启路由功能 interface BVI1 ip address 10.15.106.44 255.255.255. ...
- Redis自学笔记:2.准备
第2章:准备 '纸上得来终觉浅,绝知此事要躬行'--陆游 2.2启动和停止redis 表2-1 redis可执行文件说明 文件名 说明 redis- server redis服务器 redis-cli ...
- Scrapy基础(二)————Scrapy的安装和目录结构
Scrapy安装: 1,首先进入虚拟环境 2,使用国内豆瓣源进行安装,快! pip install -i https://pypi.douban.com/simple/ scrapy 3,特殊情 ...
- go defer笔记
1.函数中return xxx非原子指令 2.函数返回过程:先给返回值赋值:再调用defer:最后回到调用函数中 即:返回值 = xxx; defer; return; 3.多个defer调用顺序类似 ...
- vue插槽,也就是子页面、父页面相互传值的另一写法
父页面: <template> <div class="parent"> <p>父组件</p> <child> < ...
- 面试知识点——Java
目录 Java容器 hashmap实现原理 java多线程 jvm内存模型 java 垃圾回收机制 对象存活状态检查 垃圾收集算法 垃圾收集器 内存分配与回收策略 java nio Java容器 ha ...
- setState()之后使用state的问题
一开始知道setState()是异步执行方法,在使用这个方法改变state之后直接用this.state获取的state不是更新之后的,只有render发生变化的时候才触发this.setState( ...
- jmeter接口测试实例7-关联
Jmeter实例7:关联(牛刀小试中登录.金币充值接口) 必须从网上下载这个插件放在lib的ext目录下才可以用,在登录接口添加此插件 Sign是变量名,其实就是下一步充值金币要取的值:路径是从哪里取 ...
- 12 week blog
调用一个地图(百度地图)API(定位) 到网站: 1.调用API的js : <script type="text/javascript" src="https:// ...