• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

排序的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

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
StepByStep(Lua字符串库)发布时间:2022-07-22
下一篇:
(转)关于luatable是否为空的判断发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap