美文网首页
lua ——table的无言以对

lua ——table的无言以对

作者: 西瓜教主 | 来源:发表于2017-03-28 13:39 被阅读0次

    lua中,万物化table,table生万物,哈哈哈哈,好像很厉害。

    问题的由来:

    之前想写一个table排序,按顺序处理排序后的table,然后输出结果。然后遇到了一些了不得问题。找了半天原因发现是自己脑子不太好,决定婊一婊自己。

    table的存放

    table的存放其实和定义有关系

    【系统指定key定义】

    local tb = {1, 3, ad, 34}

    此时,tb中的值的key都是数字,而且是连续的key,遍历table可以发现实际存放是顺次的。就相当于数组了。

    【自指定key定义】

    ------如果我要定义一个table,他的key是不连续的,但是key又是可以按照大小排序的,此时定义table后,它实际存放的结果会不会是按照key的大小依次存放的呢?

    ------不会,你死了这条心吧

    table中,如果key值是不连续的,而且key的利用率不足50%(数量/最大key值),此时,存放是使用的Hash算法。

    所以,定义顺序 != 存放的顺序


    table 常用function

    【table.contact】将table元素连接为字符串

    使用很简单的呀:

    table.concat( tablename, ", ", start_index, end_index )

    然后:

    多系哟,所以发现了吗???

    当key不是连续的时候,这个蠢笨的table.concat 遇到第一个不连续的key就不继续连接了

    笨死了!!!

    然后蠢笨的我:

    table为嵌套的时候,将table中的所有元素连接起来,用到了书上说的递归:

    【table.sort】

    table.sort( tablename, sortfunction )

    sortfunction是第二排序算法,不填写时,默认的是对tablename内的元素进行升序排序。

    终于写到我要婊自己的地方了,我定义了一个key不连续的table,然后想对table内的元素进行排序,结果:

    不说了,说多了都是泪。。

    在对table进行排序时,需要对table进行预处理。如果是要排序table的key,就要把table的key取出来,存放到新table中,对新table进行排序。

    总之,table不是数组,不能简单的当做数组来用

    相关文章

      网友评论

          本文标题:lua ——table的无言以对

          本文链接:https://www.haomeiwen.com/subject/jobonttx.html