Lua Table Sorting 2比较

Bub*_*911 5 sorting lua return lua-table

我已经在这里找到了尽可能多的答案,因为我可以找到我认为足够接近我的问题的标题.我没有看到任何人有我的确切问题,所以我问一个问题,我希望只是我对一个简单的事实一无所知.

我正在尝试编写一个记录HP(int)和距离(boolean)的表,然后按HP排序,只有顶部附近的Range中的那些.

local tableTest = {
    {hp = 64, range = true, name="Frank"},
    {hp = 100, range = true, name="Joe"},
    {hp = 2, range = false, name="Jim"},
    {hp = 76, range = true, name="Tim"},
    {hp = 17, range = false, name="Jill"},
    {hp = 16, range = true, name="Phillip"},
}

-- Sort by HP and Range to find lowest Unit in Range.
table.sort(tableTest, function(x,y) return x.hp < y.hp and x.range end)

for i=1, #tableTest do print(tableTest[i].name, tableTest[i].hp) end
Run Code Online (Sandbox Code Playgroud)

这个输出是:

Phillip 16
Jim     2
Frank   64
Jill    17
Tim     76
Joe     100
Run Code Online (Sandbox Code Playgroud)

我期待的输出是:

Phillip 16
Frank   64
Tim     76
Joe     100
Jim     2
Jill    17
Run Code Online (Sandbox Code Playgroud)

我祈祷这只是我对table.sort如何使用这样的多个检查的误解(我认为它更接近你如何声明这样的变量).

编辑 附加信息 - 如果我更改range=false索引在表中的位置顺序,输出也会更改(仍然不正确).这些值只是在排序后将自己排序为不同的索引.

Yu *_*Hao 4

根据您的描述,您的 order 函数需要range先进行比较,然后进行比较hp

table.sort(tableTest, function(x,y) 
                          if x.range and y.range then return x.hp < y.hp 
                          elseif x.range then return true
                          elseif y.range then return false
                          else return x.hp < y.hp end
                      end)
Run Code Online (Sandbox Code Playgroud)

也许有一些较短的版本,但是这个版本确实有效并且逻辑很清晰。