【Lua基础系列】之模式匹配练习

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

就那么简单就可以实现功能,但是我却花了整整一个上午的时间。

所以说不是学会了就行,一定要多动手。加油吧~~~

 

OK,今天的博客就到这里,谢谢大家!!!

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值