lua table排序報錯與解決


lua table排序

table的sort函數

比如按照大小進行排序,下面這種寫法在某些情況下可能會排序錯誤,甚至報invalid order function for sorting

table.sort(srcTable,function(vo1,vo2) 
    return vo1 >= vo2
end)

這是為什么呢?

當兩個值相等時,lua的規定只能返回false,不能返回true。

因為sort函數里面要寫清楚所有的情況,比如上面的,如果vo1 == vo2 return true和Lua的規則不相符會報錯,這里需要對於值相等的使用其它條件或者return false,才能得到正確的結果。

如果可能出現的情況會比較多,這時候使用sort,可能要寫的很復雜,且排序不穩定。

sort函數的返回值

function(vo1,vo2) 
    return vo1 > vo2
end

return true 是要讓vo1排在前

return false 要讓vo2排在前

自己寫排序

如果排序中的條件唯一,但可能出現的情況有很多,例下這個例子,把綁定的排序在前面,非綁定在后面。

可以把滿足條件A的元素放在tba,不滿足的元素放tbb,再這兩個table插入到一個新的table中。

示例:

local binds = {}
local others = {}
for i, v in pairs(stuffList) do
	if v.isbind == true then
		table.insert(binds, v)
	else
		table.insert(others, v)
	end
end
local sorted = {}
for i, v in ipairs(binds) do
	table.insert(sorted, v)
end
for i, v in ipairs(others) do
	table.insert(sorted, v)
end

最后得到的sorted就是經過排序后的列表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM