• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 如何获得Lua表中的entry数?

如何获得Lua表中的entry数?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了lua entry,lua 随机数,lua 取数组成员数,lua生成随机数,lua随机数种子等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:如何获得Lua表中的entry数?
描述:

Lua#运算符和table.getn只能在密钥数为整数的情况下,算出entry数:

tbl = {}
tbl["test"] = 47
tbl[1] = 48
print(#tbl, table.getn(tbl))   -- prints "1     1"

count = 0
for _ in pairs(tbl) do count = count + 1 end
print(count)            -- prints "2"

我如何能够不用依次查数,就可以得到所有的entry数?

原问题:How to get number of entries in a Lua table?


解决方案1:

通过设置metatable的__len来改变默认的计数方法,代码如下

t = {
    [1] = 0,
    [2] = 2,
    [5] = 999,
    xxx = 3,    
}
print(#t)
mt = {}
setmetatable(t, mt)
mt.__len = function ( params )
    local count = 0
    for k,v in pairs(params) do
        count = count + 1
    end
    return count
end
print('+----------------')
print(#t)

输出如下:
2
+----------------
4
[Finished in 0.0s]
参考出处:http://www.codingnow.com/2000/download/lua_manual.html#2.8

解决方案2:

答:u0b34a0f6ae
(最佳答案)
你已经找到了问题的解决办法,唯一的方法就是用pairs(..)迭代(iterate)整个表:

function tablelength(T)
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end

而且,#运算符的定义不够全面,因此,还需要进行如下设定:

t = {1,2,3}
t[5] = 1
t[9] = 1

答:ergosys
你可以建立一个meta-table来统计entry的数目,这种方法比较使用于需要频繁使用这种结果的情况。


答:kikito
我的方法可能有些复杂,就是使用额外的变量来统计数,每添加一个数就增加这个变量:

count = 0
tbl = {}

tbl["test"] = 47
count = count + 1

tbl[1] = 48
count = count + 1

print(count)   -- prints "2"


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

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

  • 如何获得Lua表中的entry数?

相关文章

  • 2017-06-05 wince60pc与设备连接问题
  • 2017-06-05 关于QThread多线程乱序的解决方法
  • 2017-06-05 vxworks68UP模式下进不了系统
  • 2017-06-05 AltiumDesigner2010PCBLogoCreator
  • 2017-06-05 PIC24FJ64GA306读写24LC512其他时地址0x00-0x03的数据被修改
  • 2017-06-05 嵌入式Linux设备NandFlash如何保证分区文件不被破坏?
  • 2017-06-05 usbdevice枚举成功后,什么时候或者什么情况下进行bulk-only?
  • 2017-06-05 MSP430中断里可以有返回值返回到主函数里面吗
  • 2017-06-05 求eMbeddedVisualTools
  • 2017-06-05 如何在98下用vxd实现,某W32程序在1分钟内不与Vxd联系时,就关机?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 请问cc1100如何实现碰撞检测
    • arm汇编问题,
    • wince网络问题
    • 有没有人对数码相机与pc的通信协议比较了解的?
    • SQLCE此操作系统不支持指定的区域设置。[LCID=-1],请问是怎么回事啊?
    • 求教(这是为什么?)
    • luasql中的sqlite3查询参数化变量
    • wince数据库读写与CAN读写是否有影响
    • 对使用STM32cube生成的HAL库CAN初始化函数HAL_CAN_Init的一个疑问
    • 热释电红外传感器(PIR)中的一些参数理解,请教

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

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