zoukankan      html  css  js  c++  java
  • lua中pairs和ipairs的区别

    主要在有key为整数的时候有区别.

    注意数组默认的下标从1开始,比如a={"a","b","c","d"},和a={[1]="a",[2]="b",[3]="c",[4]="d"}是一样的.

    local a = {  
    "a","b","c","d"
    }  
       
    for k, v in pairs(a) do  
    print(k, v)  
    end  

    所以ipair和pairs的结果都是

    1    a
    2    b
    3    c
    4    d


    但是如果数组中的key和从1开始数的key不相同的话,或者是非整数,ipairs就此break,pairs不受影响.

    local a = {  
    "a",[2]="b",[4]="c",[5]="d"
    }  
       
    for k, v in pairs(a) do  
    print(k, v)  
    end  

    pairs输出

    1    a
    2    b
    4    c
    5    d

    ipairs输出

    1    a
    2    b

    应为"c"的key不是3,所以就中断了

    以及

    for k,v in pairs(a) do
      print(k,v)
    end

    也不会输出的


    还有一点需要注意的是,数组的自动排序功能

    如果改成这样

    local a = {  
    "a",[2]="b",[4]="c","d"
    }  
       
    for k, v in pairs(a) do  
    print(k, v)  
    end  

    pairs输出

    1    a
    2    d
    4    c

    因为自动排序,先按照没key的给默认key,所以就变成{[1]="a",[2]="d",[2]="b",[4]="c"}

    前面的[2]="d"会移除掉后面的,[2]="b",所以没有输出b

    如果是pairs

    1    a
    2    d

    应为[2]="b"被移除,[4]="c"不等于3,所以只输出

    1    a
    2    d


     如果table中有nil,pairs会跳过,ipairs会break掉

    a={1,nil,3,4}
    for k,v in ipairs(a) do
      print(k,v)
    end

    输入 1

    a={1,nil,5,6}
    for k,v in pairs(a) do
      print(k,v)
    end

    输出

    1    1
    3    5
    4    6

    解决办法是用select

    a={1,nil,5,6}
    for k,v in pairs(a) do
      print(k,v)
    end

  • 相关阅读:
    使用IMAGEMAGICK的CONVERT工具批量转换图片格式
    不同服务器数据库之间的数据操作
    mysql初始(6)
    Elasticsearch-基础介绍及索引原理分析
    PowerDesigner 生成C#实体模版代码
    Oracle 学习
    创建 sp
    2.7号出现的问题解决
    学习总结relative和absolute
    Sharepoint创建List
  • 原文地址:https://www.cnblogs.com/ptqueen/p/6759658.html
Copyright © 2011-2022 走看看