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"}

  • 相关阅读:
    MySQL基础(一):检索数据
    Go基础(九):并发
    Go基础(八):反射
    Go基础(七):接口
    Go基础(六):方法
    Go基础(五):结构体
    Go基础(四):流程控制和函数
    Go基础(三):内置基础类型和一些技巧
    Go基础(二):变量和常量
    Go基础(一):命令行操作
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9979124.html
Copyright © 2011-2022 走看看