• 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就是经过排序后的列表。

  • 相关阅读:
    【转载】两军问题与Paxos算法 & 动画讲解Paxos算法
    hdu4611 Balls Rearrangement
    [置顶] github简单使用
    set与map容器
    [置顶] C++为什么是C++而不是++C
    HDU 4616 Game (搜索)、(树形dp)
    Just learn how to use the JNI
    HDU 4611 Balls Rearrangement (数学-思维逻辑题)
    冒泡排序改进
    Python基础
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/9365314.html
Copyright © 2020-2023  润新知