我已經在這裏找到了很多答案,因爲我可以找到那些標題,我認爲這些標題已經足夠接近我的問題了。我沒有看到任何人有我的確切問題,所以我問了一個問題,我希望只是我對一個簡單的事實無知。Lua表分類2比較
我試圖編寫一個記錄HP(int)和距離(布爾值)的表,然後按HP排序,只有頂部附近的範圍內的值。
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
這個輸出是:
Phillip 16
Jim 2
Frank 64
Jill 17
Tim 76
Joe 100
我是從這個期望的輸出是:
Phillip 16
Frank 64
Tim 76
Joe 100
Jim 2
Jill 17
我祈禱這只是我的怎麼一部分的誤解table.sort與多個這樣的檢查一起工作(我認爲它更接近於你如何聲明這樣的變量)。
編輯 其他信息 - 如果我改變的其中range=false
指標位於表中的順序,輸出的變化,以及(仍然不正確)。這些值在排序之後會自行排列成不同的索引。
ty ty!我想我有點明白我做錯了什麼。我只是想回報真實的。所以如果我要正確理解這一點,我只是想確保我正在閱讀這個權利。 首先我們檢查兩個範圍是否都是真的,然後我們按HP排序。如果兩個範圍都不是真的,我們會看看x是否有一個真正的範圍,然後返回true,否則我們看看y是否具有範圍並返回false。如果兩者都是錯誤的,那麼我們會對HP以外的那些進行排序。 我在測試中失敗的地方是elseif y.range返回false。我們這樣做是爲了幫助你的價值被妥善排序嗎? – Bubba911
@ Bubba911在這種情況下,'x.range'爲'false',而'y.range'爲'true',因此無論'hp'的值是多少,'x'都應該在'y'後面。 –
Ty澄清:)我的思想仍然圍繞它自己。在口頭上對我自己說了幾次之後,你說的是我想到的(發佈之後)。所以我很高興聽到我的理解正確!再次感謝你,希望你有一個美好的一天,你好先生。 – Bubba911