zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    django中使用celery
    django中使用Redis
    Nginx编译和安装(超简单版)
    cookie和session
    forms组件
    反向解析(reverse())
    QuerySet对象
    models.py里的字段以及参数详解
    Q查询和F查询
    JgrId 无数据返回设置
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/9572149.html
Copyright © 2011-2022 走看看