lua系统学习10-迭代器

19 篇文章 0 订阅
14 篇文章 0 订阅
本文详细介绍了Lua中的四种迭代器:表迭代器pairs、数组迭代器ipairs、IO文件行迭代器以及字符匹配迭代器。通过实例展示了它们的使用方法和特点,强调了迭代器不保证顺序的事实,并提供了正则表达式匹配字符的示例。
摘要由CSDN通过智能技术生成

迭代器

  1. 表迭代器
  2. 数组迭代器
  3. io文件行迭代器
  4. 字符串迭代器

1.表迭代器

function iteratorpairsStruct(t)
    ---用来读取table表的
    for i, v in pairs(t) do
        print("i是什么:" .. i)
        print("v是什么:" .. v)
    end
end
local t={["x"]="x2",["y"]="y2",["z"]="z2",2}
iteratorpairsStruct(t)

输出结果:

i是什么:1
v是什么:2
i是什么:y
v是什么:y2
i是什么:x
v是什么:x2
i是什么:z
v是什么:z2

从输出结果中我们得到 在此结构中i为表索引,v为表的值。
从输出顺序中我们可以很明显的看到 它是无序的。这也证明了迭代器不能保证顺序。所以不要依靠迭代器做顺序相关的操作。包括在C#中

2.数组迭代器

local t={["x"]="x2",["y"]="y2",["z"]="z2","str1","str2","str3",[4]="str4"}

function iteratorIpairsStruct(t)
    for i,v in ipairs(t) do
        print("i是什么:" .. i)
        print("v是什么:" .. v)
    end
end
iteratorIpairsStruct(t)

结果:

i是什么:1
v是什么:str1
i是什么:2
v是什么:str2
i是什么:3
v是什么:str3
i是什么:4
v是什么:str4

ipairs用来输出数组列表的,它会从数字索引1开始向后遍历直到遇到nil结束。

IOFile迭代器

Tips:iofile是个迭代器 当每次for in会对迭代器进行Next访问下一个,每次访问会返回一行文本内容,直到Next==nil时退出循环。

function iteratorIOLine()
    l = io.lines("C:\\File\\Lua\\File\\ioFile.txt");
    print(l())
    for line in io.lines("C:\\File\\Lua\\File\\ioFile.txt") do
        print(line)
    end
end
iteratorIOLine();
FirstLine 
FirstLine 
SecondLine
ThirdLine

字符迭代器

通过使用字符匹配迭代器 来迭代任意类型字符

function iteratorChar(s)
    for c in string.gmatch(s,"[A-Z]") do
        print(c)
    end
end
iteratorChar("2AABBCC1")
A
A
B
B
C
C

//上面的匹配规则是按照正则表达式输入,没想到可以。
可以发现除了大写字母,文本中的其他内容全被筛选掉了
继续
下面匹配字母与数字

function iteratorChar(s)
    for c in string.gmatch(s,"[A-Za-z0-9]") do
        print(c)
    end
end
iteratorChar("2AaABBCC1")
2
A
a
A
B
B
C
C
1

试试匹配标点

function iteratorChar2(s)
    for c in string.gmatch(s,"[-,.?:;'\"!']") do
        print(c)
    end
end
iteratorChar2("2AaABBCC1,.")
,
.

测试是不是支持完整的正则表达式规则
貌似不支持 只知道支持这种用法
在这里插入图片描述
像这样稍微复杂的正则 gmatch就不支持了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值