• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 132  文章 - 51  trackbacks - 0
            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            標(biāo)準(zhǔn)庫提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代數(shù)組元素的(ipairs),迭代字符串中單詞的 

            (string.gmatch)等等。LUA手冊中對與pairs,ipairs解釋如下:

            ipairs (t)

            Returns three values: an iterator function, the table t, and 0, so that the construction

            for i,v in ipairs(t) do body end

            will iterate over the pairs (1,t[1]), (2,t[2]), ···, up to the first integer key absent from the table.

             

             

             

             

            pairs (t)

            Returns three values: the next function, the table t, and nil, so that the construction

            for k,v in pairs(t) do body end

            will iterate over all key–value pairs of table t.

            See function next for the caveats of modifying the table during its traversal.

             

            這樣就可以看出  ipairs以及pairs 的不同。

             

            pairs可以遍歷表中所有的key,并且除了迭代器本身以及遍歷表本身還可以返回nil;

             

            但是ipairs則不能返回nil,只能返回數(shù)字0,如果遇到nil則退出。它只能遍歷到表中出現(xiàn)的第一個不是整數(shù)的key

             


            下面舉個例子吧!

             

             eg:

            local tabFiles = {

            [3] = "test2",

            [6] = "test3",

            [4] = "test1"

            }

             

            for k, v in ipairs(tabFiles) do

            print(k, v)

            end

             

             

            猜測它的輸出結(jié)果是什么呢?

             

            根據(jù)剛才的分析,它在 ipairs(tabFiles) 遍歷中,當(dāng)key=1時候value就是nil,所以直接跳出循環(huán)不輸出任何值。

             

            >lua -e "io.stdout:setvbuf 'no'" "Test.lua"

            >Exit code: 0

             

            那么,如果是

            for k, v in pairs(tabFiles) do

            print(k, v)

            end

            則會輸出所有 :
            >lua -e "io.stdout:setvbuf 'no'" "Test.lua" 
            3 test2
            6 test3
            4 test1
            >Exit code: 0
            現(xiàn)在改變一下表內(nèi)容,
            local tabFiles = {
            [1] = "test1",
            [6] = "test2",
            [4] = "test3"
            }
            for k, v in ipairs(tabFiles) do
            print(k, v)
            end
            現(xiàn)在的輸出結(jié)果顯而易見就是key=1時的value值test1

             >lua -e "io.stdout:setvbuf 'no'" "Test.lua" 

            1 test1

            >Exit code: 0 

            --[示例1.]--
            local tt 
            =
            {
                [
            1= "test3",
                [
            4= "test4",
                [
            5= "test5"
            }


            for i,v in pairs(tt) do        -- 輸出 "test4" "test3" "test5"
                print( tt[i] )
            end

            for i,v in ipairs(tt) do    -- 輸出 "test3" k=2時斷開
                print( tt[i] )
            end





            -- [[示例2.]] --
            tbl 
            = {"alpha""beta", [3= "uno", ["two"= "dos"}

            for i,v in ipairs(tbl) do    --輸出前三個
                print( tbl[i] )
            end

            for i,v in pairs(tbl) do    --全部輸出
                print( tbl[i] )
            end




            posted on 2011-12-16 08:43 風(fēng)輕云淡 閱讀(20928) 評論(3)  編輯 收藏 引用 所屬分類: LUA

            FeedBack:
            # re: lua 中pairs 和 ipairs區(qū)別[未登錄] 2014-03-28 16:31 kyle
            英語不好就別誤人子弟了

            ---------------------------Yours-----------
            pairs可以遍歷表中所有的key,并且除了迭代器本身以及遍歷表本身還可以返回nil;
            但是ipairs則不能返回nil,只能返回數(shù)字0,如果遇到nil則退出。它只能遍歷到表中出現(xiàn)的第一個不是整數(shù)的key

            --------------------------Mine------------
            pairs遍歷表中全部key,value
            ipairs從下標(biāo)為1開始遍歷,然后下標(biāo)累加1,如果某個下標(biāo)元素不存在就終止遍歷。這就導(dǎo)致如果下標(biāo)不連續(xù)或者不是從1開始的表就會中斷或者遍歷不到元素。  回復(fù)  更多評論
              
            # re: lua 中pairs 和 ipairs區(qū)別 2015-08-01 13:15 damnimgood
            感謝分享 獲益了  回復(fù)  更多評論
              
            # re: lua 中pairs 和 ipairs區(qū)別 2015-09-04 22:32 Rming
            @kyle

            謝謝分享  回復(fù)  更多評論
              
            久久精品国产只有精品66| 免费精品久久天干天干| 亚洲va久久久噜噜噜久久天堂| 亚洲AV无一区二区三区久久 | 久久美女人爽女人爽| 九九热久久免费视频| 综合久久精品色| 中文字幕成人精品久久不卡| 久久午夜伦鲁片免费无码| 伊人久久大香线蕉无码麻豆| 国产精品久久久久影院嫩草| 麻豆亚洲AV永久无码精品久久| 超级碰久久免费公开视频| 亚洲精品高清久久| 色诱久久久久综合网ywww| 亚洲精品无码久久久久AV麻豆| 久久香蕉国产线看观看99| 伊人久久大香线蕉av不变影院| 久久无码国产专区精品| 精品久久久无码中文字幕天天 | 久久久久亚洲AV无码永不| 久久AV高潮AV无码AV| 久久精品国产99国产精品导航| 久久国产亚洲精品麻豆| 国产巨作麻豆欧美亚洲综合久久| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 日本国产精品久久| 久久成人小视频| 性做久久久久久免费观看| 国产国产成人久久精品| 久久精品国产亚洲综合色| 国产人久久人人人人爽| 国产激情久久久久影院老熟女免费| 久久国产精品无码HDAV| 精品久久久久久成人AV| 国产成人久久精品一区二区三区| 久久久久亚洲av无码专区喷水 | 狠狠综合久久AV一区二区三区| 久久综合色老色| 久久精品水蜜桃av综合天堂| 久久国产精品无码HDAV |