• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua中获取table长度的方法

Lua中获取table长度的方法

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lua table长度,lua获取table长度,lua table取长度,lua table,lua table.insert等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

官方文档是这么描述#的:

取长度操作符写作一元操作 #。 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。

table t 的长度被定义成一个整数下标 n 。 它满足 t[n] 不是 nil 而 t[n+1] 为 nil; 此外,如果 t[1] 为 nil ,n 就可能是零。 对于常规的数组,里面从 1 到 n 放着一些非空的值的时候, 它的长度就精确的为 n,即最后一个值的下标。 如果数组有一个“空洞” (就是说,nil 值被夹在非空值之间), 那么 #t 可能是指向任何一个是 nil 值的前一个位置的下标 (就是说,任何一个nil 值都有可能被当成数组的结束)。
local tblTest2 =
{
    1,
    a = 2,
    3,
}

print(table.getn(tblTest2))
</div>
这段代码输出的结果是多少?这里的输出结果应该是2。首先,要明白,这个tblTest2不是一个简单的table,它混合了列表(list)和记录(record)两种风格,表中,a = 2是record风格。其次,要明白,record风格的record是不作为外表的长度计算。你可以把它想象成一个函数,跟其他面向对象语言一样,函数是不记为内部变量的。

既然像函数一样,那就可以输出a的值,是的。print(tblTest2.a)就可以了。

再看下面的代码:
local tblTest3 =
{
    1,
    {a = 2},
    3,
}

print(table.getn(tblTest3))
</div>
这段代码输出的结果是多少?这里的输出结果应该是3。要注意,表嵌套表,嵌套表也是元素。所以,输出的结果是3。
table.getn(t)
</div>
等价于 #t。
以下情况相当纠结,可直接看最后一句话总结:

现在来看一个比较纠结的:
local tblTest4 =
{
    1,
    nil,
}

print(table.getn(tblTest4))
</div>
这段代码输出的结果是多少?是1。我们都知道table获取长度的时候,会遍历一下整个表,在最后一个非nil处,就会返回。
但是,下面这段代码呢?
local tblTest5 =
{
    1,
    nil,
    2,
}

print(table.getn(tblTest5))
</div>
输出3,好玩吧?它把nil也当成元素计算长度了。但叫你摸不着头脑的是下面这段代码:。
local tblTest5 =
{
1,
nil,
2,
nil
}
</div>
输出1.再发一段,让你完全蒙掉:
local tblTest5 =
{
1,
nil,
2,
nil,
3,
nil
}
</div>
输出3.蒙了没?再看,这一段叫你以后再也不敢再table中写nil值:
local tblTest5 =
{
1,
nil,
2,
nil,
3,
nil,
4,
nil
}
</div>
看看吧,这一段的输出结果是1。亲,请问,你以后还敢在lua的table中用nil值吗???如果你继续往后面加nil,你可能会发现点什么。你可能认为你发现的是个规律。但是,你千万不要认为这是个规律。因为这是错误的。

1、在table中不要使用nil

2、如果非要使用nil,必须用table.setn()函数去设置这个table表的长度。注意:新版本的lua已经不支持setn了。

必须给你个结论:

setn函数已过时,不要在lua的table中使用nil值,如果一个元素要删除,直接remove,不要用nil去代替。

</div>

您可能想查找下面的文章:

  • Lua中获取table长度问题探讨
  • Lua中获取table长度的方法
  • Lua文件读写详解
  • Lua table简明总结

相关文章

  • Lua教程(十): 全局变量和非全局的环境
  • Lua性能优化技巧(一):前言
  • Lua判断字符串中包含中文字符的方法和计算字符串宽度函数分享
  • Lua和Nginx结合使用的超级指南
  • Lua返回一个Closures函数实例
  • 深入解读Lua中迭代器与泛型for的使用
  • 实例讲解Lua中pair和ipair的区别
  • Lua判断变量是否为数字、字符串是否可以转换为数字等
  • Lua所有内置函数罗列
  • Lua table的concat方法使用实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua常用时间函数使用实例
    • Lua中强大的元方法__index详解
    • 浅析Lua编程中的异常处理
    • 使用lua实现php的var_dump()函数功能
    • Lua学习笔记之表和函数
    • Lua中使用模块的一些基础知识
    • Lua教程(十六):系统库(os库)
    • lua日志文件处理代码
    • Lua中的函数精讲笔记
    • Lua读写文件代码示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有