gpt4 book ai didi

sorting - 如何对这个lua表进行排序?

转载 作者:行者123 更新时间:2023-12-02 15:25:01 24 4
gpt4 key购买 nike

我有下一个结构

self.modules = {
["Announcements"] = {
priority = 0,
-- Tons of other attributes
},
["Healthbar"] = {
priority = 40,
-- Tons of other attributes
},
["Powerbar"] = {
priority = 35,
-- Tons of other attributes
},
}

我需要按优先级 DESC 对该表进行排序,其他值并不重要。例如。首先是生命条,然后是能量条,然后是所有其他条。

//编辑。

必须保留 key 。

//编辑#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

最佳答案

您无法对记录表进行排序,因为条目是由 Lua 内部排序的,并且您无法更改顺序。

另一种方法是创建一个数组,其中每个条目都是一个包含两个字段(名称优先级)的表,然后对该表进行排序,如下所示:

self.modulesArray = {}

for k,v in pairs(self.modules) do
v.name = k --Store the key in an entry called "name"
table.insert(self.modulesArray, v)
end

table.sort(self.modulesArray, function(a,b) return a.priority > b.priority end)

for k,v in ipairs(self.modulesArray) do
print (k,v.name)
end

输出:

1       Healthbar       40
2 Powerbar 35
3 Announcements 0

关于sorting - 如何对这个lua表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com