Lua的迭代器

    迭代器( iterator)是一个对象,能够遍历标准容器格式里面的数据, 在Lua中迭代器是一种支持指针类型的结构,他可以遍历集合里面的元素。
泛型for迭代器

    泛型for迭代器在自己的内部保留有迭代函数,泛型for迭代器也提供了键值对,具体格式如下:

for k,v pairs(table) do
	print("this iterator")
end

其中k,v是变量列表,pairs是迭代函数。下面是实例

array = {"one","two"}
for k,v in ipairs(array) do
	print(v)
end

运行结果:

one
two

在Lua中我们通常使用函数来描述迭代器,每调用一次迭代器,就返回所遍历集合的下一个元素,Lua中迭代器有两种分类:无状态迭代器和多状态的迭代器

无状态迭代器

无状态迭代器指的是在循环过程中,不保留任何状态的迭代器,这样我们就可以避免创建闭包所花费的代价。

典型的无状态迭代器就是:ipairs

现在我们实现一个求数字平方的迭代器:

function mysquare(Maxnumber,Index)
	if Index < Maxnumber then
		Index = Index + 1
		return Index,Index*Index
	end
end

for i,v in mysquare,3,0  do
	print(i,v)
end

运行结果:

1    1
2    4
3    9

我们也可以去实现一下迭代函数:ipairs

function myiter(table,index)
	index = index +1
	local a = table[index];
	if a then
		return index,a
	end
end

function myipairs(table)
	return myiter,table,0
end

array = {"one","two"}

for k,v in myipairs(array) do
	print(k,v)
end

运行结果:

1    one
2    two

多状态的迭代器

以下实例我们创建了自己的多状态迭代器

扫描二维码关注公众号,回复: 2294746 查看本文章
array = {"one","two"}
function myiter(table)
	local index = 0
	local count = #table
	return function()
			index = index + 1
			if index <= count then
				return table[index]
			end
		end
end

for v in myiter(array) do
	print(v)
end

运行结果:

one
two

猜你喜欢

转载自blog.csdn.net/dy_1024/article/details/81006415