• Lua无法排序的问题(Key需要是连续的)


    排序的Key需要是连续的

    local x = {[1]={x=6},
               [2]={x=5},
               [3]={x=7},
               [5]={x=2},
               [6]={x=8},
               [7]={x=5}}
    ---从小到大排序
    table.sort(x,function(a,b)
        return a.x < b.x
    end)
    
    for i=1,10 do
        if x[i] ~= nil then 
            print(x[i].x)
        end
    end
    
    

    打印出:5,6,7, 2,8,5
    可以看到后面的数据并没有进行排序,因为key不是连续的,中间存在断层,Lua只会对连续的部分进行排序。

    非连续Key不能排序

    local x = { [101] = { x = 6 },
                     [2] = { x = 5 },
                     [10] = { x = 7 } }
    print("排序前:", table.tostring(x))
    ---从小到大排序
    table.sort(x, function(a, b)
        return a.x < b.x
    end)
    print("排序后:", table.tostring(x))
    

    打印出:排序前和排序后数据是一样的,同样验证 Lua只会对连续的部分进行排序

    排序前:	{
      101 = {
        x = 6,
      },
      2 = {
        x = 5,
      },
      10 = {
        x = 7,
      },
    }
    排序后:	{
      101 = {
        x = 6,
      },
      2 = {
        x = 5,
      },
      10 = {
        x = 7,
      },
    }
    
    

    解决办法

    local tb = { [101] = { x = 6 },
                 [2] = { x = 5 },
                 [10] = { x = 7 } }
    --保存全部的key
    local keys = {}
    for k, v in pairs(tb) do
        table.insert(keys, k)
    end
    --对key进行排序
    table.sort(keys, function(a, b)
        return a < b
    end)
    for i, key in ipairs(keys) do
        local data = tb[key]
    end
    
  • 相关阅读:
    虚树入门
    378. 骑士放置(最大独立集)
    377. 泥泞的区域(最大点集)
    352. 闇の連鎖
    P2680 运输计划
    Linux下的段错误(Segmentation fault)
    Acwing 98-分形之城
    快速幂 和 快速乘
    P1308-道路修建 (noi 2011)
    洛谷 P1070 道路游戏(noip 2009 普及组 第四题)
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/9572149.html
Copyright © 2020-2023  润新知