Lua 迭代器学习笔记
什么是迭代器?
在 Lua 中,迭代器(iterator)是一种可以遍历数据集合的机制。它允许你逐个访问集合中的元素,并在不了解集合内部结构的情况下进行遍历。
Lua 官方迭代器
Lua 中提供了两种迭代器函数,分别为 ipairs()
和 pairs()
。其中,ipairs()
用于迭代数组类型的表,而 pairs()
则用于迭代非数组类型的表。
ipairs()
ipairs()
函数用于迭代数组类型的表,相当于 C 语言中的 for (i = 0; i < n; i++)
循环。它会遍历表中所有从 1 开始连续编号的元素,直到第一个不连续编号的元素。以下是 ipairs()
的语法:
luaCopy Codefor i, v in ipairs(t) do
-- code
end
其中,参数 t
是待迭代的表,i
是当前正在遍历的键,而 v
则是当前正在遍历的值。
接下来是一个 ipairs()
的实例:
luaCopy Codeweekdays = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}
for i, v in ipairs(weekdays) do
print(i, v)
end
上面的代码遍历了一个包含工作日名称的数组,输出结果如下:
Copy Code1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
pairs()
pairs()
函数用于迭代非数组类型的表,相当于 C 语言中的 for (p = first(table); p != NULL; p = next(table, p))
循环。它会遍历表中所有的键值对,并按随机顺序返回每一对。以下是 pairs()
的语法:
luaCopy Codefor k, v in pairs(t) do
-- code
end
其中,参数 t
是待迭代的表,k
是当前正在遍历的键,而 v
则是当前正在遍历的值。
接下来是一个 pairs()
的实例:
luaCopy CodemyTable = {key1 = "value1", key2 = "value2", key3 = "value3"}
for k, v in pairs(myTable) do
print(k, v)
end
上面的代码遍历了一个包含键值对的表,输出结果如下:
Copy Codekey1 value1
key2 value2
key3 value3
自定义迭代器
除了 Lua 官方提供的迭代器函数外,你也可以自定义迭代器函数以满足特定需求。自定义迭代器函数需要返回三个值,分别为迭代器函数本身、被迭代的表、起始键值(可以理解为上一次迭代的位置)。
以下是一个使用自定义迭代器函数的实例:
luaCopy Codefunction squareIterator(max)
local i = 0
return function()
i = i + 1
if i <= max then
return i, i * i
end
end
end
for i, v in squareIterator(5) do
print(i, v)
end
上面的代码定义了一个名为 squareIterator
的自定义迭代器函数,它会根据传入的参数 max
返回一个迭代器函数。每次调用迭代器函数时,它会返回下一个数字和该数字的平方值。接下来,我们通过 for
循环遍历这个迭代器函数,并输出结果:
Copy Code1 1
2 4
3 9
4 16
5 25
总结
迭代器是一种强大的工具,它可以帮助我们在不了解数据结构的情况下遍历集合中的元素。通过本文,我们学习了 Lua 中官方的迭代器函数 ipairs()
和 pairs()
,以及如何使用自定义迭代器函数进行遍历。相信这些知识对你在日常 Lua 编程中处理数据结构将有所帮助。