zoukankan      html  css  js  c++  java
  • lua table排序报错与解决

    lua table排序

    table的sort函数

    比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting

    table.sort(srcTable,function(vo1,vo2) 
        return vo1 >= vo2
    end)
    

    这是为什么呢?

    当两个值相等时,lua的规定只能返回false,不能返回true。

    因为sort函数里面要写清楚所有的情况,比如上面的,如果vo1 == vo2 return true和Lua的规则不相符会报错,这里需要对于值相等的使用其它条件或者return false,才能得到正确的结果。

    如果可能出现的情况会比较多,这时候使用sort,可能要写的很复杂,且排序不稳定。

    sort函数的返回值

    function(vo1,vo2) 
        return vo1 > vo2
    end
    

    return true 是要让vo1排在前

    return false 要让vo2排在前

    自己写排序

    如果排序中的条件唯一,但可能出现的情况有很多,例下这个例子,把绑定的排序在前面,非绑定在后面。

    可以把满足条件A的元素放在tba,不满足的元素放tbb,再这两个table插入到一个新的table中。

    示例:

    local binds = {}
    local others = {}
    for i, v in pairs(stuffList) do
    	if v.isbind == true then
    		table.insert(binds, v)
    	else
    		table.insert(others, v)
    	end
    end
    local sorted = {}
    for i, v in ipairs(binds) do
    	table.insert(sorted, v)
    end
    for i, v in ipairs(others) do
    	table.insert(sorted, v)
    end
    

    最后得到的sorted就是经过排序后的列表。

  • 相关阅读:
    Springmvc
    Mybatis关联关系
    Mybatis整合ehcache 和 redis
    Mybatis与spring集成
    MyBatis动态sql和分页
    MyBatis入门
    Vue模板语法(二)
    Vue模板语法(一)
    Spring---SSH整合(二)
    Spring---SSH整合
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/9365314.html
Copyright © 2011-2022 走看看