zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    python 版本 jaeger-client 导入失败 jaeger-client-python
    kubernetes ingress 重定向地址错误
    win10 多用户登录
    kubernetes监控prometheus配置项解读
    最新版 源码编译 docker
    alpine 容器优化
    kubernetes 中安装 heapster 问题
    github开源文章生成pdf
    jmeter分布式测试
    Cucumber(1)
  • 原文地址:https://www.cnblogs.com/YYRise/p/7419123.html
Copyright © 2011-2022 走看看