Lua按键值排序数组

时间:2018-04-03 08:26:12

标签: arrays sorting lua

我有一个32个元素的数组,如下所示:

racers[i] = {plCP = 0, plPos = 0}

我想用值plCP对这个数组进行排序,并将plPos设置为排序的值。像这样:

racers[1] = {plCP = 3, plPos = 3}
racers[2] = {plCP = 2, plPos = 4}
racers[3] = {plCP = 6, plPos = 2}
racers[4] = {plCP = 12, plPos = 1}
racers[4] = {plCP = 6, plPos = 2}

另请注意,2个项目可能具有相同的plCP值。我希望他们在这些情况下具有相同的plPos值。

这是针对我正在进行的赛车游戏,我正在尝试根据他们目前正朝着哪个检查点来计算玩家在比赛中的位置。

1 个答案:

答案 0 :(得分:1)

请参阅Lua参考手册:

https://www.lua.org/manual/5.3/manual.html#pdf-table.sort

  

table.sort(list [,comp])

     

按给定顺序对列表元素进行排序,   就地,从列表[1]到列表[#list]。如果给出comp,则必须   是一个接收两个列表元素的函数,并在返回时返回true   第一个元素必须在最后一个顺序中排在第二个元素之前(所以   那,在排序后,我< j表示不是comp(list [j],list [i]))。如果   没有给出comp,那么标准的Lua算子<用来代替。   请注意,comp函数必须定义严格的部分顺序   列表中的元素;也就是说,它必须是不对称的   传递。否则,可能无法进行有效排序。那种   算法不稳定:被给定顺序认为相等的元素   可能会改变他们的相对位置。

table.sort(racers,comp)如果你实现了一个函数comp,它会告诉Lua两个元素中的哪一个首先出现。

简单示例:

local animals = {
     {name = "bunny", size = 4},
     {name = "mouse", size = 1},
     {name = "cow", size = 30}
}
-- sort animals by size descending
table.sort(animals, function(a,b) return a.size > b.size end)

for i,v in ipairs(animals) do print(v.name) end

print()

-- sort animals by size ascending
table.sort(animals, function(a,b) return a.size < b.size end)
for i,v in ipairs(animals) do print(v.name) end

您需要做的就是在知道订单后复制几个值。或者你编写自己的排序算法。