迭代器
- 表迭代器
- 数组迭代器
- io文件行迭代器
- 字符串迭代器
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,.")
,
.