[Lua]table使用随笔

本文介绍了在Lua中获取table长度的两种方法:直接使用#或table.getn的局限性,以及通过pairs遍历计数的适用场景。同时,对比了pairs和ipairs在处理字典类型的table时的不同行为。
摘要由CSDN通过智能技术生成

个人笔记,不对正确性负责,请看官自行斟酌。

前言

table是lua中非常重要的一种类型,有必要对其多了解一些。

1、获取table长度

一般有两种方法:

方法1,table.getn 或

使用#或者table.getn获取

这是一种比较简单的方法,但使用过程有许多局限性,主要体现在以下几个方面,如下:

t = {}
t[1] = 1
t[2] = 2
t[4] = 4
print(#t)

按道理说,应该输出的结果是3,但实际结果确是4,是不很反直觉?先不要急着思考,再看看这个例子:

t1 = {1,2,3,num4=4,num5=5}
print(#t1)

按一般直觉来说,这里应该输出5,但真的有那么简单吗?显然不是,而是3。为什么呢?因为#操作会从访问所有数字下标的元素,而且仅可以从1开始,中间必须连贯。因此这种方式只能用来操作数组类型的table,即不要设置key值,仅通过table.insert方法操作

方法2,通过pairs遍历table,然后获取长度

对于字典类型的table,显然不能用上面的方法获取长度,要用一些其他的方法。看下面的例子

function countDictElements(dict)
  local count = 0
  for k,v in pairs(dict) do
    count = count + 1
  end
  return count
end

local myDict = { key1 = "value1", key2 = "value2", key3 = "value3" }
print(countDictElements(myDict)) -- 输出表中的键值对数量

代码比较简单,就是通过遍历table的元素,然后挨个数过来。

2、pairs和ipairs区别

如果将获取字典长度方法中的pairs换乘ipairs,会发生什么?看下面一个例子

function countDictElements(dict)
  local count = 0
  for _ in ipairs(dict) do
    count = count + 1
  end
  return count
end

local myDict = { key1 = "value1", key2 = "value2", key3 = "value3" }
print(countDictElements(myDict)) -- 输出表中的键值对数量

输出结果是:0
为什么呢?因为pairs会遍历table中所有的元素,而ipairs的功能类似于#或者table.getn,仅能遍历数字下标,key值必须连续。所以某种意义上说,上面的方法类似于一个#

待补充……

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值