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

    ipairs 在迭代过程中是会直接跳过所有手动设定key值的变量。pairs不会跳过手动设置key值的变量。

    实例

    tab = {1,2,a="cd","d"}
    for i,v in pairs(tab) do
        print(i,v)
    end

    输出

    1    1
    2    2
    3    d
    a    cd

    实例

    tab = {1,2,a="cd","d"}
    for i,v in ipairs(tab) do
        print(i,v)
    end

    输出

    1    1
    2    2
    3    d

    如果遇到手动设置的key并且值为nil,那么pairs和ipairs都会选择跳过该元素

    例如:

    tab = {1,2,a= nil,"d"}
    for i,v in pairs(tab) do
        print(i,v)
    end

    输出

    1  1
    2  2
    3  d

    实例

    tab = {1,2,a= nil,"d"}
    for i,v in ipairs(tab) do
        print(i,v)
    end

    输出

    1  1
    2  2
    3  d

    ipairs在迭代过程中如果遇到nil时会直接停止。pairs会选择跳过。

    实例

    tab = {1,2,nil,"d"}
    for i,v in pairs(tab) do
    print(i,v)
    end

    输出

    1 1
    2 2
    4 d

    实例

    tab = {1,2,nil,"d"}
    for i,v in ipairs(tab) do
    print(i,v)
    end

    输出

    1 1
    2 2

    for 循环中,循环的索引 i 为外部索引,修改循环语句中的内部索引 i,不会影响循环次数

    for i=1,10 do
        i = 10
        print("one time,i:"..i)
    end

    仍然循环 10 次,只是 i 的值被修改了

    one time,i:10
    one time,i:10
    one time,i:10
    one time,i:10
    one time,i:10
    one time,i:10
    one time,i:10
    one time,i:10
    one time,i:10
    one time,i:10

    pairs 能迭代所有键值对。遇到nil不会停止,会直接跳过

    tab = {1,2,v=5,nil,"d"}
    for i,v in pairs(tab) do
    print(i,v)
    end

    输出

    1    1
    2    2
    4    d
    v    5

    ipairs 只会迭代键为数字的键值对,遇到nil会停止

    tab = {1,2,v=5,c=nil,"d"}
    for i,v in ipairs(tab) do
    print(i,v)
    end

    输出

    1    1
    2    2
    3    d

    总结

    共同点:

    遇到手动设置的值为nil的元素会跳过,如, tab = {1,2,a= nil,"d"}

    不同点:

    pairs遇到nil会跳过,ipairs遇到nil会停止 , 如,tab = {1,2,v=5,nil,"d"}

    pairs能够输出手动设置的元素,ipairs只能输出键值为整数的元素,如,tab = {1,2,v=5,nil,"d"}

  • 相关阅读:
    对比使用Charles和Fiddler两个工具及利用Charles抓取https数据(App)
    Charles-安装和配置
    python算法-队列
    python算法-快速排序
    【Codeforces】383.DIV2
    static关键字
    UNIX环境高级编程--5
    【LeetCode】467. Unique Substrings in Wraparound String
    typedef关键字
    strcpy 和 memcpy自实现
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9979124.html
Copyright © 2011-2022 走看看