【Lua基础系列】之模式匹配练习
大家好,我是Lampard~~
欢迎来到Lua基础系列的博客
PS:本博客知识参考资料为:《Lua程序设计第四版》,该书由Lua的创始人2018年所编著,所以大家可以放心去吸收知识
前文再续,书接上一回。
今天收到了老大安排的一个小需求,要求我把【【key1,value1】,【key2,value2】】这种存储结构的键值对取出来。
稍微一看,这不很简单吗? 定睛一瞧,不对,我会个鬼........
当时我冒出的想法是,先把它拆开小部分:先解决从【key1,value1】中提取键值对 。因为对库函数的不熟悉,所以我的代码是这样写的:
function GetKeyVaule(str)
local MyStr = string.match(str,"%[(.-)%]")
local key= string.match(MyStr,"%a+")
local value = string.match(MyStr,"%d+")
print(key,value)
end
很复杂对吧:我想的是先消除了两个括号,然后再把键值对从拆开括号中提出
于是就出了版本二:
function GetMember (str)
Keywords = {}
for w in string.gmatch(str,"%a+") do
Keywords[#Keywords + 1] = w
end
Valuewords = {}
for w in string.gmatch(str,"%d+") do
Valuewords[#Valuewords + 1] = w
end
for i=1, #Keywords do
print(Keywords[i],Valuewords[i])
end
end
GetMember(s)
这次我直接把键和值分别存到不同的表中,然后用的时候 再分别取值 。但是也不足够 ,老大说还可以简化,后来我一想为何要分两次循环呢?于是版本三来了:
function GetKV (str)
for k,v in string.gmatch(str,"%[(%a+),(%d+)%]") do
print(k,v)
end
end
GetKV(s)
就那么简单就可以实现功能,但是我却花了整整一个上午的时间。
所以说不是学会了就行,一定要多动手。加油吧~~~