加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

排序 – 在Lua中排序表[]

发布时间:2020-12-15 00:22:52 所属栏目:大数据 来源:网络整理
导读:我有一个我想要排序的Lua表。表的格式如下: tableOfKills[PlayerName] = NumberOfKills 这意味着,例如,如果我有一个名叫罗宾的球员,总共有8次杀戮,另外一个命名为Jon,总共有10次杀戮,表将是: tableOfKills[Robin] = 8tableOfKills[Jon] = 10 如何排
我有一个我想要排序的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读