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,总和零;后者数量和总和均为零。相同总和不能说明存在相同数量的记录。
文章回复
0 条公开回复