• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua教程-泛型for迭代器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Lua中for循环提供了对数字型和非数字型(泛型)的支持,其中对数字型的支持已经在之前的文章“Lua教程-流程控制”中进行说明,在这主要讲解下泛型for迭代器,依据table的结构分为两种:

  • 数字型table
    索引key全部为数字。
  • 非数字型table
    索引可以为数字或字母

而针对这两种不通类型的table可以使用的函数有ipairs(t)和pairs(t),接下来看看这两个函数使用和区别:

ipairs(t)

可以遍历索引值为数字的table,格式为:

for k,v in ipairs(t) do
	---do something
end
local table1 = {"a","b","c","d","e","f"}
for i, v in ipairs(table1) do
    print(i , v)
end

以上示例定义一个table,默认索引值从1开始,输出结果为:

1	a
2	b
3	c
4	d
5	e
6	f

再来看两个示例同样定义一个table但是采用显示声明索引值:

  1. 索引值全部为数字
local table2 = {[1] ="a" , [2] = "b" , [4] = "c"}
for i, v in ipairs(table2) do
    print("i=",i,"v=",v)
end

输出结果却为:

i=	1	v=	a
i=	2	v=	b
  1. 索引值为数字和字母
local table2 = {[1] ="a" ,["hello"] = "aaaaaaaaaa" , [2] = "b" , [4] = "c"}
for i, v in ipairs(table2) do
    print("i=",i,"v=",v)
end

输出结果与示例1一样为:

i=	1	v=	a
i=	2	v=	b

由此可以总结出ipairs()函数是按照连续数值型索引的值,而对于非数字型的索引值则不输出。

pairs(t)

可以遍历混合型的table,格式为:

for k,v in pairs(t) do
	---do something
end

改造ipairs示例2的代码。

local table2 = {[1] ="a" ,["hello"] = "aaaaaaaaaa" , [2] = "b" , [4] = "c"}
for i, v in pairs(table2) do
    print("i=",i,"v=",v)
end

输出结果为:

i=	1	v=	a
i=	2	v=	b
i=	4	v=	c
i=	hello	v=	aaaaaaaaaa

所有的元素均被输出,进一步观察发现输出的顺序并非是按照table中定义的顺序输出的,而是无序的。
再来看看如果为数值型的table,pairs(t)函数是否支持。

local table1 = {"a","b","c","d","e","f"}
for i, v in pairs(table1) do
    print(i , v)
end

输出结果为:

1	a
2	b
3	c
4	d
5	e
6	f

可以正常输出,再来看下显式声明索引值是如何输出的。

local table3 = {[1] ="a" ,[2] = "b" ,[5] = "c" ,[8] = "d", [4] = "e"}
for i, v in pairs(table3) do
    print("i=",i,"v=",v)
end

输出结果为:

i=	2	v=	b
i=	8	v=	d
i=	1	v=	a
i=	4	v=	e
i=	5	v=	c

同样也可以输出,并且也是无序的。

总结

看过一篇文档说pairs(t)函数的输出顺序是先输出数值型索引元素,再输出非数值型的元素,但根据上边的示例可以看出并不是这样而是无序输出。本教程使用的是5.1版本没有在其他版本上测试,不知道是不是版本原因。
由上述示例可以看出两个函数的区别:

  • ipairs(t)函数只能是数值型索引table,输出结果为连续数值型索引,若有中断则只输出连续的元素。
  • pairs(t)函数可以支持纯数值型索引和混合索引table,且无序输出。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua中string.find()函数作用于汉字字符串发布时间:2022-07-22
下一篇:
quick-cocos2d-x实现在lua里面完成android支付宝的接入发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap