lua系统学习10-迭代器

迭代器

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

表迭代器

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)

lua是弱类型语言,自由度比较大,table可以充当字典。table中元素定义key使用[""]定义,若不定义,默认以1开始延续。

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

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

数组迭代器

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)

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")

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

下面匹配字母与数字

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就不支持了.

作者:Miracle
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/programming-life/lua/3439/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
海报
lua系统学习10-迭代器
迭代器 表迭代器 数组迭代器 io文件行迭代器 字符串迭代器 表迭代器 function iteratorpairsStruct(t) ---用来读取table表的 for i, v in pairs(t……
<<上一篇
下一篇>>
文章目录
关闭
目 录