zoukankan      html  css  js  c++  java
  • lua 求table长度和判断空

    local table_a = {}


        判断一:(错误方法)
        if table_a == {} then
            --你会发现你怎么也进不来 条件判断始终返回false,为什么会这样呢?
            --原因:{}相当于创建了一个表,只不过这个表的名字是匿名的,你看不到,我们假设它叫table_b
            --你会发现判断条件变成了比较table_a、table_b的内存地址。所以条件判断始终返回false。
            --正确的实现方法:判断二  
        end

        判断二:(正确方法)

                if next(table_a) == nil then
                    --你想实现的操作
                end

                --成功原因:next获取表中的下一个内容,在空表里是没有下一个内容的,返回nil

    //怎么求table的长度呢

    获取数组的长度

    对于一个数组我们通常可以使用#和table.getn来获取其长度

    1. tabletest = {1,2,3,5,7}
    2. print(table.getn(tabletest)) ------》5
    3. print(#tabletest) ------》5
    • 1
    • 2
    • 3

    使用这两种方法都能得到这个数组的长度,但是如果

    1. tabletest = {1,2,nil,3,5,7}
    2. print(table.getn(tabletest)) ------》2
    3. print(#tabletest) ------》2
    • 1
    • 2
    • 3

    发现不能获得我们数组真正的长度,这是因为数组默认遇到nil便被判断为数组结束,所以最好不要用#和table.getn来获取包含有nil的数组长度

    获取table的长度

    对于table来说,如果他不是数组,我们使用#和table.getn是不能获取它的长度的

    1. tabletest = {a=1,b=2,c=3,e=5,f=7}
    2. print(table.getn(tabletest)) ------》0
    3. print(#tabletest) ------》0
    • 1
    • 2
    • 3

    我们可以使用pairs来获取 

    1. tabletest = {a=1,b=2,c=3,d=5,e=7}
    2. local count=0
    3. for k,v in pairs(tabletest) do
    4. count = count + 1
    5. end
    6. print(count) ------》5

    注意#只能获取索引为连续数字的长度,如果不连续,只能获取到连续的地方,其他地方被舍弃。

  • 相关阅读:
    python基础——协程
    Python基础并发编程——进程
    Python基础并发编程——操作系统
    python基础——socket
    Python基础——网络编程
    文件操作
    深浅拷贝和流程控制
    数据类型
    基础知识
    session和cookie
  • 原文地址:https://www.cnblogs.com/yanzi-meng/p/11274413.html
Copyright © 2011-2022 走看看