DevCN
菜单
全部文章快讯开发深度热点

Lua 入门:通过连续 table 序列统计学习记录

用 table 保存连续记录,通过 ipairs 过滤并累计,理解常用的一起始索引与 nil 对序列遍历的影响。


本节目标

用 table 保存连续记录,通过 ipairs 过滤并累计,理解常用的一起始索引与 nil 对序列遍历的影响。

环境与运行方法

使用 Lua 5.4 或更新版本。保存为 lesson.lua,运行 lua lesson.lua。只使用标准功能,不需要游戏引擎或外部模块。

核心思路

table 既可以表达序列,也可以表达映射。本例使用从 1 开始的连续整数键,ipairs 按这个序列读取。零是普通有效数值,nil 才表示缺少值。

完整示例

local records = {20, -5, 35, 0}
local total, count = 0, 0
for _, value in ipairs(records) do
    if value >= 0 then
        total = total + value
        count = count + 1
    end
end
print(string.format("valid=%d total=%d", count, total))
print("original=" .. #records)

预期输出

valid=3 total=55
original=4

逐步理解

local 避免无意创建全局变量,下划线只是忽略索引时使用的变量名。string.format 控制数字展示,两个点负责字符串连接。原记录没有被删除,所以仍有四项。

ipairs 遇到中间缺失位置会停止,不适合带洞的稀疏数组。# 对这种 table 也不能当作可靠元素总数。映射遍历可使用 pairs,并在需要稳定展示时额外排序。

常见问题与边界

  • Lua 中零和空字符串都是真值。
  • 中间 nil 会破坏连续序列假设。
  • pairs 的顺序不应成为业务规则。

动手练习

把输入改成 {0,0},再改成空 table。

参考答案

前者有效数量 2,总和零;后者数量和总和均为零。相同总和不能说明存在相同数量的记录。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。