最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

泛型for循環(huán)簡(jiǎn)單介紹

2020-02-24 04:46 作者:多華宮與火火里  | 我要投稿

枚舉型(泛型)for循環(huán)是用來以遍歷一個(gè)集合中所有元素的,比如它可以一個(gè)個(gè)枚舉出一個(gè)table的所有下標(biāo)和數(shù)值

一個(gè)基礎(chǔ)的格式是這樣的

比如現(xiàn)在有一個(gè)table是tbl={h="84ssh",c=233,[7]=66}

然后用for循環(huán)來枚舉出tbl這個(gè)表的元素

for sssss,rrrrrr in pairs(tbl) do?? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?--[[首先這一句基本上就是固定格式,前面的sssss和rrrrrr都是你自己取名字的變量。然后那個(gè)pairs是每一對(duì)的意思,它是一個(gè)迭代器(等會(huì)簡(jiǎn)單介紹),我們知道在table里一個(gè)下標(biāo)和一個(gè)值是成對(duì)出現(xiàn)的、有下標(biāo)就有值,有值就有下標(biāo),它們就是一對(duì)一對(duì)的,你用這個(gè)for sssss,rrrrrr in?pairs(tbl) do 就可以列出每一對(duì)下標(biāo)和值,而pairs里填的tbl就是你指定的要枚舉的那一個(gè)table。--]]

print(sssss..","..rrrrrr)? ? ? ? ? ? ? ? ? ? ? ? ?--然后直接看看出來的sssss和rrrrrr是什么

end

然后執(zhí)行以后你就會(huì)看到結(jié)果是

h,84ssh

c,233

7,66

這就說明在一次次的循環(huán)中,變量sssss和rrrrrr被被動(dòng)賦值,sssss得到了下標(biāo),而rrrrrr對(duì)應(yīng)的得到了相應(yīng)的值。當(dāng)然結(jié)果就是for循環(huán)遍歷整個(gè)tbl這個(gè)表的所有元素

利用枚舉型for循環(huán)可以計(jì)算下標(biāo)不連續(xù)的table的元素個(gè)數(shù),因?yàn)槿绻聵?biāo)是字符串的話就不能用#來計(jì)算table的長(zhǎng)度了,所以現(xiàn)在可以這么寫:

function get(xx)

local n=0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--[[一開始n=0然后準(zhǔn)備讓它循環(huán)一次就變大1,只要循環(huán)表的元素個(gè)數(shù)次即可--]]

for?k,v in?pairs(xx) do

n=n+1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --[[每循環(huán)一次n就加1,又因?yàn)檫@個(gè)泛型for循環(huán)可以遍歷整個(gè)表,所以到最后n的值就是循環(huán)的次數(shù)、就是有多少個(gè)元素、就是表的長(zhǎng)度--]]

end

return n

end

然后就可以用這個(gè)函數(shù)來求比如剛剛前面定義過的表tbl

比如? local aaa=get(tbl)? ? ? ? ? ?print(aaa)這樣就能得到表tbl的長(zhǎng)度了


然后再講迭代器之前,先區(qū)分一下遞歸和迭代:



那迭代器是什么呢,迭代器本身就是個(gè)函數(shù)(叫做迭代器函數(shù)),然后它的內(nèi)部還存在一個(gè)執(zhí)行迭代的函數(shù)(這執(zhí)行迭代的函數(shù)稱為迭代函數(shù))。

迭代器能夠用來遍歷某些集合中的部分或全部元素,每次調(diào)用該函數(shù)(迭代器)就返回集合的下一個(gè)元素。

所以才有剛剛說的泛型for的格式:

對(duì)于迭代器,為了更形象的理解,可以自定一個(gè)迭代器看看,比如:

function Iterator (tbl)

? ? ??? local index = 0

? ??? ? local count = #tbl

? ? ??? return function ()

? ? ? ? ? ? ??? ? index = index + 1

? ? ? ? ? ? ? ? ? if index <= count

? ? ? ? ? ? ? ??? then

? ? ?? ? ? ? ? ???return index,tbl[index]? ? ? ? ? ?????--? 返回迭代器的當(dāng)前下標(biāo)和元素

? ? ? ? ? ? ? ? ??end

? ? ? ? end

end

可以看到,這個(gè)Iterator函數(shù)就是個(gè)迭代器,然后它里面有個(gè)迭代函數(shù)

現(xiàn)在比如你有個(gè)table是ooo={"cct73",233,66,"ccx45"}? ? ? ? 那么再用泛型for循環(huán)

for _,cc in?Iterator(ooo) do?print(_.."? ?"..cc) end? ? ? ? ? ? ? ? ? ?--[[一般如果用不到兩個(gè)傳遞參數(shù)的話,可以簡(jiǎn)寫成_和_也就是寫成 for _,_ in 迭代器 do 這種樣子,因?yàn)檎f了這里變量名自定--]]

然后你就會(huì)得到結(jié)果

1? ?cct73

2? ?233

3? ?66

4? ?ccx45

也就是用迭代器函數(shù)Iterator遍歷了ooo這個(gè)表,當(dāng)然現(xiàn)在寫的這個(gè)Iterator函數(shù)明顯只能遍歷從下標(biāo)1開始的連續(xù)數(shù)字下標(biāo)的元素,因?yàn)楹瘮?shù)里設(shè)定的變量index 一開始得0,執(zhí)行迭代函數(shù)的時(shí)候index 就從1開始,每一次index =index +1,所以就只能遍歷出從1開始的一段連續(xù)下標(biāo)的元素,如果下標(biāo)數(shù)字不連續(xù)了,或者下標(biāo)是字符串了,那么就斷掉了,后面就遍歷不到了。

所以在介紹泛型for的時(shí)候說的pairs()就是一個(gè)迭代器




另外,最后提一下break的用法

還有break只能用在循環(huán)里面,比如for循環(huán)、while循環(huán)、repeat循環(huán)

你用一個(gè)break就能跳出這一個(gè)循環(huán),如果你有循環(huán)嵌套,那你break也只是跳出那一個(gè)當(dāng)前層的循環(huán)、break只是結(jié)束當(dāng)前所在的嵌套層,所以這樣break以后就會(huì)開始執(zhí)行外層的循環(huán)語句











這之后的視頻還會(huì)介紹返回值是迭代器的函數(shù)

比如gamtch這個(gè)匹配函數(shù),它的返回值就是一個(gè)迭代器函數(shù)




文章最后,提點(diǎn)別的,有誰知道下面這幅畫的出處嗎,好幾年過去了我都沒找到,我是真的超喜歡這幅畫!


泛型for循環(huán)簡(jiǎn)單介紹的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
河池市| 万宁市| 谢通门县| 靖州| 兴和县| 惠东县| 定州市| 黄陵县| 阿城市| 杭锦旗| 龙井市| 黎城县| 鄯善县| 容城县| 荔波县| 德江县| 灌南县| 岐山县| 浦江县| 麟游县| 鹿邑县| 阜康市| 兰坪| 宜君县| 阿克陶县| 台前县| 石屏县| 临安市| 元谋县| 临清市| 德昌县| 乌海市| 九寨沟县| 壶关县| 化隆| 锦屏县| 景宁| 资中县| 浦县| 金溪县| 青田县|