• Lua的 table.sort排序


    在用table.sort 排序的时候注意,如果使用多个条件排序,应在一个排序函数里按照条件优先级进行比较排序。

    例如

    local t = {
            {time = 2, i = 1},
            {time = 5, i = 2},
            {time = 0, i = 2},
            {time = 3, i = 4},
            {time = 1, i = 5},
            {time = 4, i = 2},
        }

    现要求按 i 排序,i 相同时按 time 排序,

    假如用两次排序

    1、先用time排序

    table.sort(t, function(t1, t2) return t1.time > t2.time end)
    print("t = {")
    for i, v in ipairs(t) do
        print(string.format("	[%d] = {time = %d, i = %d}", i, v.time, v.i))
    end
    print("}")

    排序后结果:

    t = {
            [1] = {time = 5, i = 2}
            [2] = {time = 4, i = 2}
            [3] = {time = 3, i = 4}
            [4] = {time = 2, i = 1}
            [5] = {time = 1, i = 5}
            [6] = {time = 0, i = 2}
    }

    此时再按 i 排序

    table.sort(t, function(t1, t2) return t1.i > t2.i end)
    
    print("t = {")
    for i, v in ipairs(t) do
        print(string.format("	[%d] = {time = %d, i = %d}", i, v.time, v.i))
    end
    print("}")

    期望 i 相等时(i = 2)能得到和按 time 排序后的一样的相对位置,即:

    t = {
            [1] = {time = 1, i = 5}
            [2] = {time = 3, i = 4}
            [3] = {time = 5, i = 2}
            [4] = {time = 4, i = 2}
            [5] = {time = 0, i = 2}
            [6] = {time = 2, i = 1}
    }

    然而实际结果却是:

    t = {
            [1] = {time = 1, i = 5}
            [2] = {time = 3, i = 4}
            [3] = {time = 5, i = 2}
            [4] = {time = 0, i = 2}
            [5] = {time = 4, i = 2}
            [6] = {time = 2, i = 1}
    }

    这应该是table.sort的内部排序算法造成的。

    所以,在多个条件下排序需要一个排序函数,只调用table.sort()一次。而且多次排序也影响性能。

    table.sort(t, function(t1, t2) 
        if t1.i == t2.i then
            return t1.time > t2.time
        else
            return t1.i > t2.i
        end
    end)
  • 相关阅读:
    DataTable轉EXCEL 3/21
    中風預防知識
    unable to convert mysql date/time value to system.data.time 11/14
    win8 获得地理坐标 GIS
    页面嵌套 GIS
    win8 metro 弹出一个部分 GIS
    正则表达式基础 之 ? GIS
    windows phone pivot 开发过程中的使用心得 GIS
    线程不安全 GIS
    线程基础知识 GIS
  • 原文地址:https://www.cnblogs.com/YYRise/p/7419123.html
Copyright © 2020-2023  润新知