Lua - 对字符串排序的表

我已经制作了一个 LUA 表格来显示积分榜:

Score.Ranks = {}

Score.Ranks["superadmin"]     = {name = "Boss", col = Color(183, 109, 253) }
Score.Ranks["operator"]       = {name = "Chief", col = Color(254, 129, 1) }
Score.Ranks["commander"]      = {name = "Commander", col = Color(222, 54, 54) }
Score.Ranks["moderator"]      = {name = "Director", col = Color(53, 225, 227) }

我想排序这个表格,使得当在我的积分榜上显示时,'names'按以下顺序排序:

Boss
Director
Commander
Chief

我该怎么做呢?

点赞
用户2858170
用户2858170

因为你只有4个项目,所以我建议手动排序。

print("计分板:")
print(Score.Ranks.superadmin.name)
print(Score.Ranks.moderator.name)
print(Score.Ranks.commander.name)
print(Score.Ranks.operator.name)

你需要告诉电脑,超级管理员排在版主之前,以便等下可以排序。但如果你必须为每个条目输入一个优先级,那么就没有必要排序了。并不能通过任何属性来推导出顺序。

2020-06-27 12:17:29
用户7504558
用户7504558

你只能对数值索引的表进行排序,所以首先要转换表:

Score.Ranks = {}

Score.Ranks["operator"]       = {name = "Chief", col = Color(254, 129, 1) }
Score.Ranks["superadmin"]     = {name = "Boss", col = Color(183, 109, 253) }
Score.Ranks["commander"]      = {name = "Commander", col = Color(222, 54, 54) }
Score.Ranks["moderator"]      = {name = "Director", col = Color(53, 225, 227) }

local tmp_t = {}
for k,v in pairs(Score.Ranks) do
    local rank = (k=="superadmin") and 1 or (k=="operator" and 3 or 2)
    table.insert(tmp_t, { rank = rank .. v.name, key = k, name = v.name, col = v.col} )
end

然后按名称排序表,然后使用它。

table.sort(tmp_t ,  function (a, b) return  (a.rank <  b.rank ) end)
for k,v in pairs(tmp_t) do
    print(k , v.rank, v.key, v.name)
end

2020-06-27 17:30:04