我有一个我想要排序的Lua表。表的格式如下:
tableOfKills[PlayerName] = NumberOfKills
这意味着,例如,如果我有一个名叫罗宾的球员,总共有8次杀戮,另外一个命名为Jon,总共有10次杀戮,表将是:
tableOfKills[Robin] = 8 tableOfKills[Jon] = 10
如何排序这种类型的表,以显示最高的杀死率?提前致谢!
解决方法
Lua中的表是一组具有唯一键的键值映射。这些对以任意顺序存储,因此表不以任何方式排序。
你可以做的是按顺序迭代表。基本的对不保证键的访问顺序。这是一个自定义版本的对,我称之为多余的,因为它以排序顺序遍历表:
function spairs(t,order) -- collect the keys local keys = {} for k in pairs(t) do keys[#keys+1] = k end -- if order function given,sort by it by passing the table and keys a,b,-- otherwise just sort the keys if order then table.sort(keys,function(a,b) return order(t,a,b) end) else table.sort(keys) end -- return the iterator function local i = 0 return function() i = i + 1 if keys[i] then return keys[i],t[keys[i]] end end end
以下是使用此功能的示例:
Highscore = { Robin = 8,Jon = 10,Max = 11 } -- basic usage,just sort by the keys for k,v in spairs(Highscore) do print(k,v) end --> Jon 10 --> Max 11 --> Robin 8 -- this uses an custom sorting function ordering by score descending for k,v in spairs(Highscore,function(t,b) return t[b] < t[a] end) do print(k,v) end --> Max 11 --> Jon 10 --> Robin 8