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 ...
随机推荐
- C#为什么要多线程开发(一)
首先说下多线程出现的原因: 为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等 ...
- django-debug-toolbar和Django 日志配置
django-debug-toolbar介绍 django-debug-toolbar 是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. gith ...
- Codeforces.662C.Binary Table(状压 FWT)
题目链接 \(Description\) 给定一个\(n\times m\)的\(01\)矩阵,你可以选择一些行和一些列并将其中所有的\(01\)反转.求操作后最少剩下多少个\(1\). \(n\le ...
- [CQOI2005]三角形面积并
[CQOI2005]三角形面积并 题目大意: 求\(n(n\le100)\)个三角形的面积并. 思路: 自适应辛普森法,玄学卡精度可过. 源代码: #include<cmath> #inc ...
- BZOJ4613 : [Wf2016]Longest Rivers
对于每条河流,要让它排名最靠前,那么显然它必须要延伸到根. 设第$i$条河流到根的距离为$d[i]$,对于每个节点,如果存在一条河流比$d[i]$长,那么让它延伸会使答案最小,否则要选择一条最短的河流 ...
- .net 相关性能计数器丢失问题解决方案
1.开始运行:cmd 2.在cmd窗口中执行下面命令: cd c:\windows\system32 lodctr /R 执行完上面命令,会提示:“信息: 成功地从系统备份存储中重建性能计数器设置” ...
- linux使用Anaconda管理多个版本的Python环境
1.下载(直接到清华镜像下载) 下载链接,选择合适的版本,我试了几个,选择了一个下载最快的,原谅我的渣渣网速, 官网在国外,必须找镜像,不然很慢很慢,,,,,, 此步骤真的很慢,重新选择下载网址,这个 ...
- PAT Basic 1005
1005 继续(3n+1)猜想 (25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程 ...
- 数据格式JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易 ...
- Codeforces Round #443 (Div. 1) A. Short Program
A. Short Program link http://codeforces.com/contest/878/problem/A describe Petya learned a new progr ...