lua table相关注意事项

1. 判断是否为空:

使用lua内置的next函数,比如:

if next(tableData) ~= nil then

但要注意:使用next判断的话,不得赋予tableData新的元素,否则结果是未知的。

2. 删除元素:

不建议方式:

local datalist = {1,2,3,4,5,6,7,8,9,10,20}
for k, v in pairs(datalist) do
    if v % 2 == 0 then
        table.remove(datalist, k)
    end
end

table.foreachi(datalist,function(k,v)
    print("output value:"  .. v)
end)
输出结果:
[LUA-print] output value:1
[LUA-print] output value:3
[LUA-print] output value:5
[LUA-print] output value:7
[LUA-print] output value:9
[LUA-print] output value:20

会发现有的数据没有被删除,故此推荐如下方式(从后往前删除):

local datalist = {1,2,3,4,5,6,7,8,9,10,20}

for i = #datalist,1, -1 do
    if datalist[i] % 2 == 0 then
        table.remove(datalist, i)
    end
end    

table.foreachi(datalist,function(k,v)
    print("output value:" .. v)   -- outvalue:1,3,5,7,9,20
end)
[LUA-print] output value:1
[LUA-print] output value:3
[LUA-print] output value:5
[LUA-print] output value:7
[LUA-print] output value:9

原文地址:https://www.cnblogs.com/SkyflyBird/p/8283899.html

时间: 2024-08-29 21:03:44

lua table相关注意事项的相关文章

table相关的API

void lua_getglobal (lua_State *L, const char *name);获取lua全局变量,将lua的全局变量global name压栈.堆栈+1 void lua_setglobal (lua_State *L, const char *name);设置lua全局变量,弹出一个值,并将之设为global name的值.堆栈-1 void lua_createtable (lua_State *L, int narr, int nrec);创建空表并压栈,会根据参

lua table引用问题

一,基础 1,在lua中,table只是传递引用,所以不能用简单的 "=" 来copy两个表,并试图修改一个表中的值. tb = {} tb.a = 11 tb.b = 22 tb_ref = tb function p(tip)   print("--------------------------"  .. tip)   print("tb.a = " .. tb.a .. "    " .. "tb.b = &

0522.构建轻量级的Table View注意事项[UIKit]

参考文章来自objcio网站 一.使用Child View Controller 将Table ViewController 作为Child View Controller添加到其他View Controller中.这样的话父Controller可以管理其他View,同时你的Table View Controller也可以继续管理自己的table view.当然你需要通过一个delegate来使父Controller与子Controller进行通信 二.让Cell可以复用 对于复杂的Cell或者

lua table integer index 特性

table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.) 返回表中最大的正数值index. 说明: 1. 此接口不是统计表中元素的

Lua table pair和ipair区别

官方描述: ipairs (t) Returns three values: an iterator function, the table t, and 0, so that the construction for i,v in ipairs(t) do body end will iterate over the pairs (1,t[1]), (2,t[2]), ···, up to the first integer key absent from the table. pairs (

redis lua script 相关

脚本的执行是原子性的,当某个脚本正在运行的时候,不会有其他脚本或redis命令被执行. 这意味着运行一个缓慢的脚本并不是一个好主意,当运行脚本时,其他的客户端会认为服务器忙. 共有6个lua脚本相关的命令: 1. eval 可以对输入的脚本求值:    EVAL script numkeys key [key ...] arg [arg ...] numkeys 参数用于指定键名参数的个数,键名参数key[key...] 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis

Lua table 的长度问题

直入主题 我们要取lua table的长度时习惯这样 local tb = {1,2,3,4} print(#tb) 这时候,输出理所当然的是4,如果在程序中我们需要判断长度时使用这样的方法,再看一下 tb[1] = nil print(#tb) 输出还是4,似乎有点背离我们的意愿 我们想知道这个table里面是不是有4个值,但是有一个值被置空了,输出结果却没有及时告诉我们 发生这样问题的原因是,lua在初始化table的时候,会给这个table分配值存储的空间,代码里面tb初始化包含4个数字值

树形打印lua table表

local print = print local tconcat = table.concat local tinsert = table.insert local srep = string.rep local type = type local pairs = pairs local tostring = tostring local next = next function print_lua_table (lua_table, indent) if not lua_table or t

(转) 关于lua table是否为空的判断

在项目的脚本lua中经常有这样的需求, 1.local a = {} 2.对a进行处理 3.对a是否为空表进行判断 关于对a是否为空表的判断,我发现有些代码如此做: if a == {} then 这样的结果就是a == {}永远返回false,是一个逻辑错误.因为这里比较的是table a和一个匿名table的内存地址. 也有些代码如此做: if table.maxn(a) == 0 then 这样做也不保险,除非table的key都是数字,而没有hash部分. 难道真的要遍历table发现有