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发现有东西就return false跳出才能断定它是否为空吗?这样写至少代码太难看.

网上小搜了一下,发现原来官方手册里早已经给了答案,那就是靠lua内置的next函数

即如此用:if next(a) == nil then

next其实就是pairs遍历table时用来取下一个内容的函数.

在项目的module中最好封装一下,免得module本地也有next函数

于是封装后判断的lua table是否为空的函数如下:

function table_is_empty(t)

return _G.next( t ) == nil

end

原地址 http://yy1983228.blog.163.com/blog/static/54211491200881092239485/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Lua语言中,table是一种非常重要的数据类型,它类似于其他编程语言中的数组、字典、哈希表等数据结构。Lua中的table可以存储任何类型的值,包括其他table。 以下是常用的table方法: 1. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 2. table.insert(table, [pos,] value):在table中插入一个元素,pos表示插入的位置,value表示要插入的值。 3. table.remove(table [, pos]):从table中删除一个元素,pos表示删除的位置,默认删除最后一个。 4. table.sort(table [, comp]):对table中的元素排序,comp为比较函数,可选。 5. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 6. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 7. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 8. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 9. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值