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个数字值,然后对第一个值置空,但是分配出去的空间依然存在。说到这里,已经有人明白了,"#"取的是table分配出的空间,稍稍偏离了实际逻辑的需求,看这样的代码

local tb = {nil,nil,nil,nil}
print(#tb)

输出是0

因为lua碰到nil,先不分配空间,所以#tb自然也就是0

时间: 2024-11-06 17:10:05

Lua table 的长度问题的相关文章

lua table remove元素的问题

当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtest) do XXX end for key, value in ipairs(tbtest) do XXX end for i=1, #(tbtest) do XXX end for i=1, table.maxn(tbtest) do XXX end 前两种是泛型遍历,后两种是数值型遍历.当然你还

Lua Table元素的删除

Lua 中的Table元素删除主要有两种方法:1.将字段赋值为 nil2.使用Table库里的 table.remove(table, index) 下面着重讲解两种方法 1 table.remove 先来看一下这个库函数的函数原型: table.remove(table, pos) @table:要删除的表@pos: 要删除表元素的位置,这个参数可选,如果不传的话, 默认为table的长度,即从表最后一个元素删起 local t = {10, 20, 30, 40,50, 60} table.

Lua 表取长度

稀疏数组的长度返回的不对,不知道算不算是个 bug?(在 Lua5.2.2 中测试的)如果一个表容量一半的元素,用 '#' 取长度取的不对.但是对于小于容量一半的情况,表现的是对的.根据 Lua 的代码实现,'#'号取表长度时取得是表中第一个空元素前的那个位置.原文是(luaH_getn 注释) :Try to find a boundary in table `t'. A `boundary' is an integer index such that t[i] is non-nil and

从实现求差集介绍lua table需要注意的一些问题

用lua实现的求两个table的差集(只支持一维table) 1.lua table 判空: table 判空,用的了next()函数. next()函数说明:运行程序来遍历表中的所有域. 第一个参数是要遍历的表,第二个参数是表中的某个键. next 返回该键的下一个键及其关联的值. 如果用 nil 作为 第二个参数调用 next 将返回初始键及其关联值. 当以最后一个键去调用,或是以 nil 调用一张空表时, next 返回 nil. 如果不提供第二个参数,将认为它就是 nil. 可以用 ne

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 (

树形打印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发现有

Lua table转C++数组

为了方便,这里数组用vector表示. C++层代码如下: static int LuaTable2Vector(lua_State *luaState) { int count = luaL_getn(luaState, 1); std::vector<std::string> vecNameList; for (int i = 0; i < count; i++) { lua_rawgeti(luaState, 1, i+1); const char *strName = lua_t