Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 在Lua中对表[]排序_Sorting_Lua_Lua Table - Fatal编程技术网

Sorting 在Lua中对表[]排序

Sorting 在Lua中对表[]排序,sorting,lua,lua-table,Sorting,Lua,Lua Table,我有一张Lua表,我正在整理。该表的格式如下: tableOfKills[PlayerName] = NumberOfKills 这意味着,例如,如果我有一个名为罗宾的玩家,共有8次杀戮,另一个名为乔恩的玩家,共有10次杀戮,那么这个表将是: tableOfKills[Robin] = 8 tableOfKills[Jon] = 10 我如何对该类型的表进行排序,以首先显示最高的杀戮?提前谢谢 Lua中的表是一组具有唯一键的键值映射。这些对以任意顺序存储,因此表不会以任何方式排序 您可以

我有一张Lua表,我正在整理。该表的格式如下:

tableOfKills[PlayerName] = NumberOfKills
这意味着,例如,如果我有一个名为罗宾的玩家,共有8次杀戮,另一个名为乔恩的玩家,共有10次杀戮,那么这个表将是:

tableOfKills[Robin] = 8
tableOfKills[Jon]   = 10

我如何对该类型的表进行排序,以首先显示最高的杀戮?提前谢谢

Lua中的表是一组具有唯一键的键值映射。这些对以任意顺序存储,因此表不会以任何方式排序

您可以做的是以某种顺序遍历表。基本
不能保证访问密钥的顺序。这是一个定制版本的
pairs
,我称之为
spairs
,因为它按排序顺序遍历表:

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,a,b) return t[b] < t[a] end) do
    print(k,v)
end
--> Max     11
--> Jon     10
--> Robin   8
HighScore={Robin=8,Jon=10,Max=11}
--基本用法,按键排序即可
对于spairs中的k,v(高分)do
印刷品(k,v)
结束
-->乔恩10
-->最多11个
-->罗宾8
--这使用了一个自定义排序函数,按分数降序排序
对于spairs中的k,v(高分,函数(t,a,b)返回t[b]最多11个
-->乔恩10
-->罗宾8

表的可能重复项不是有序数组或其他内容。它没有明确的顺序。+1表示
spairs()
迭代器的实现。迭代器通常是一个很难向新用户解释的概念,在野外解释好的例子将有助于缓解这一问题。