• <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
            <2011年7月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            標準庫提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代數組元素的(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,只能返回數字0,如果遇到nil則退出。它只能遍歷到表中出現的第一個不是整數的key

             


            下面舉個例子吧!

             

             eg:

            local tabFiles = {

            [3] = "test2",

            [6] = "test3",

            [4] = "test1"

            }

             

            for k, v in ipairs(tabFiles) do

            print(k, v)

            end

             

             

            猜測它的輸出結果是什么呢?

             

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

             

            >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
            現在改變一下表內容,
            local tabFiles = {
            [1] = "test1",
            [6] = "test2",
            [4] = "test3"
            }
            for k, v in ipairs(tabFiles) do
            print(k, v)
            end
            現在的輸出結果顯而易見就是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 風輕云淡 閱讀(20911) 評論(3)  編輯 收藏 引用 所屬分類: LUA

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

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

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

            謝謝分享  回復  更多評論
              
            人妻无码精品久久亚瑟影视| 欧美午夜精品久久久久免费视| 亚洲精品无码久久千人斩| 久久久久国产精品嫩草影院| 久久热这里只有精品在线观看| 久久婷婷国产综合精品| segui久久国产精品| 香蕉久久久久久狠狠色| 久久99久久99精品免视看动漫| 久久人人爽人爽人人爽av| 久久免费看黄a级毛片| 久久精品无码午夜福利理论片| 国产亚洲精午夜久久久久久| 亚洲国产精品无码久久久秋霞2| 国产精品成人99久久久久| 亚洲午夜久久久影院伊人| 久久精品亚洲乱码伦伦中文 | 97久久婷婷五月综合色d啪蜜芽| 国产精品久久久久AV福利动漫| 久久无码AV中文出轨人妻| 久久精品国产亚洲AV高清热| yy6080久久| 久久se这里只有精品| 久久久久无码精品国产不卡| 国产69精品久久久久观看软件| 国产99久久久久久免费看| 久久国产精品成人片免费| 伊人久久大香线蕉AV色婷婷色| 日本久久中文字幕| 久久久久一本毛久久久| 久久久久成人精品无码| 日韩精品久久久久久| 国产精品久久久久影院嫩草| 久久超碰97人人做人人爱| 久久亚洲国产成人精品性色| 久久精品国产AV一区二区三区 | 久久国产高潮流白浆免费观看| 色狠狠久久综合网| 久久免费香蕉视频| 亚洲人成无码www久久久| 久久精品这里只有精99品|