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就是經過排序后的列表。