【发布时间】:2013-07-29 14:26:19
【问题描述】:
我有下一个结构
self.modules = {
["Announcements"] = {
priority = 0,
-- Tons of other attributes
},
["Healthbar"] = {
priority = 40,
-- Tons of other attributes
},
["Powerbar"] = {
priority = 35,
-- Tons of other attributes
},
}
我需要按优先级 DESC 对这个表进行排序,其他值无所谓。 例如。首先是 Healthbar,然后是 Powerbar,然后是所有其他的。
// 编辑。
必须保留密钥。
// 编辑#2
找到了解决办法,谢谢大家。
local function pairsByPriority(t)
local registry = {}
for k, v in pairs(t) do
tinsert(registry, {k, v.priority})
end
tsort(registry, function(a, b) return a[2] > b[2] end)
local i = 0
local iter = function()
i = i + 1
if (registry[i] ~= nil) then
return registry[i][1], t[registry[i][1]]
end
return nil
end
return iter
end
【问题讨论】:
-
排序是什么意思?带有字符串键的表是未排序的。要对其进行排序,您需要更改数据结构。您的预期结果是什么?
-
Sort a Table[] in Lua 的可能重复项