Lua判断Table是否为空的方法(空的table即{})

判断方法结论:

代码如下:

a={}
if next(a) ~=nil then dosomething end

最近在项目里面大量使用的lua,其中lua的table是lua中重要的数据结构,可以被用来当做C++中的数组,vector,map来使用。

    如何判断lua中的table是否是空的table呢?

一开始我没动脑子,是这样写的:

代码如下:

a={}
if a ==nil then dosomething end

这个方法错误是显而易见的,在lua中a其实是一个指针,指向了table的结构,所以这个方法其实是比较地址是否为空,显然错了。

之后我改进了下,代码如下:

代码如下:

a={}
if a=={} then dosomething end

仔细一看上面的改进,相当于没改,这里的a指针比较的还是一个匿名的地址,肯定是false。

之后我这样想,空table的size肯定为0,那我直接判断表的大小不就完了嘛,于是我借助#操作符,代码改进为:

代码如下:

a={}
if #a==0 then dosomething end

但是问题来了,#操作符要求table中的项都不为nil,悲剧!之后我想到了table.maxn内置函数,于是代码继续改成:

代码如下:

a={}
if table.maxn(a) == 0 then dosomething end

不容易啊,程序可以跑了,但是查阅了下相关资料,maxn函数是根据每一项的hash来判断的,这样写代码也很保险,除非你的table是全数字的键。

最后才想起用泛型方法遍历一个table时使用的内置next函数,代码改进如下:

代码如下:

a={}
if next(a) ~=nil then dosomething end

(0)

相关推荐

  • Lua中的table浅析

    Lua的table提供了Map的功能,实现了"关联数组",并且整数.字符串甚至nil都可以作为索引/key:table没有固定的大小.   基于table,可以表示普通数组.符号表.集合.记录.队列和其他数据结构.   而Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例如io.read表示使用"read"来索引table io.   在Lua中,table既不是值也不是"变量",而是对象,可以

  • Lua中对table排序实例

    lua中利用到的排序的基本上就是构造函数(table)了,为了便于和C区分开来,我俗称它为表单. 实例:(原理就是LUA集成的冒泡算法) 排序的一般姿势(对于只包含数字或者只包含字符串的简单数组) 复制代码 代码如下: table.sort(test) 扩展版 复制代码 代码如下: table.sort(test, function(a,b) return a.id<b.id end ) 实例一:值排序 1.数组模式 复制代码 代码如下: local test0 ={1,9,2,8,3,7,4,

  • Lua中的table学习笔记

    table 在 Lua 里是一种重要的数据结构,它可以说是其他数据结构的基础,通常的数组.记录.线性表.队列.集合等数据结构都可以用 table 来表示,甚至连全局变量(_G).模块.元表(metatable)等这些重要的 Lua 元素都是 table 的结构.可以说,table  是一个强大而又神奇的东西. table 特性 在之前介绍 Lua 数据类型时,也说过了 table 的一些特性,简单列举如下(详情可查看之前的介绍): 1.table是一个"关联数组",数组的索引可以是数字

  • Lua判断Table是否为空的方法(空的table即{})

    判断方法结论: 复制代码 代码如下: a={} if next(a) ~=nil then dosomething end 最近在项目里面大量使用的lua,其中lua的table是lua中重要的数据结构,可以被用来当做C++中的数组,vector,map来使用.     如何判断lua中的table是否是空的table呢? 一开始我没动脑子,是这样写的: 复制代码 代码如下: a={} if a ==nil then dosomething end 这个方法错误是显而易见的,在lua中a其实是一

  • JS集成fckeditor及判断内容是否为空的方法

    本文实例讲述了JS集成fckeditor及判断内容是否为空的方法.分享给大家供大家参考,具体如下: <script type="text/javascript"> <!-- // Automatically calculates the editor base path based on the _samples directory. // This is usefull only for these samples. A real application shoul

  • smarty模板判断数组为空的方法

    本文实例讲述了smarty模板判断数组为空的方法.分享给大家供大家参考.具体如下: 这里主要介绍两种方法: 1. 用count来取得数组的下标个数 下面例子中,如果$array为空则不输出任何数据 {if $array|@count neq 0 } // array is empty {/if} 2. 直接判断 { if $array neq ""} //array is empty {/if} 希望本文所述对大家基于smarty模板的php程序设计有所帮助.

  • C#判断多个文本框是否为空的方法

    本文实例讲述了C#判断多个文本框是否为空的方法.分享给大家供大家参考.具体实现方法如下: /// <summary> /// 自定义方法,判断项目中txt标签是否为空 /// </summary> /// <param name="txt">要进行判断为空的标签</param> /// <returns>是否全部都不为空,如果全部都不为空返回 true </returns> bool CheckEmpty(para

  • python简单判断序列是否为空的方法

    本文实例讲述了python简单判断序列是否为空的方法.分享给大家供大家参考.具体如下: 假设有如下序列: m1 = [] m2 = () m3 = {} 判断他们是否为空的高效方法是: if m1: ...... if not m2: ...... 希望本文所述对大家的Python程序设计有所帮助.

  • jQuery实现批量判断表单中文本框非空的方法(2种方法)

    本文实例讲述了jQuery实现批量判断表单中文本框非空的方法.分享给大家供大家参考,具体如下: 方法一: <script type="text/javascript"> /* * 批量验证表单非空 * 需要非空验证控件的样式class="mustadd" */ $(".mustadd").each(function(){ if($(this).val() == ''){ alert("该项不可为空!"); $(th

  • freemarker判断对象是否为空的方法

    FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等. freemarker中显示某对象使用${name}. 但如果name为null,freemarker就会报错.如果需要判断对象是否为空: <#if name??> -- </#if> 当然也可以通过设置默认值${name!''}来避免对象为空的错误.如果name为空,就以默认值("!"后的字

  • js中定义一个变量并判断其是否为空的方法

    js中定义一个变量 var params=null;判断params不为空的方法: 复制代码 代码如下: if(params && params.hasOwnProperty("name")){} 其中:console.info(params);//结果为:Object {}

  • JavaScript判断DIV内容是否为空的方法

    1.问题背景 判断div内部是否为空,如果为空,给出无数据提示:否则显示正常页面 2.实现效果图如下所示: 3.设计源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xh

  • python使用any判断一个对象是否为空的方法

    本文实例讲述了python使用any判断一个对象是否为空的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: >>> eth = {"eth0″:"192.168.1.1″} >>> any(eth) True >>> eth = {} >>> any(eth) False 判断list是否为空 传统的方式: 复制代码 代码如下: if len(mylist):     # Do somethi

随机推荐