lua table排序報錯與解決

2021-09-07 19:18:15 字數 1160 閱讀 2416

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)

endendlocal sorted = {}

for i, v in ipairs(binds) do

table.insert(sorted, v)

endfor i, v in ipairs(others) do

table.insert(sorted, v)

end

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

Lua Table根據value排序

使用lua開發需要把有用的資料全部存進table裡,lua也提供了乙個sort介面來給table排序,但是sort的實現也是基於氣泡排序,他預設table的key是從1開始的,這樣就會造成當我們的key是一些特殊的標誌位,比如遊戲中揹包資料的guid,就會無法正常排序。所以我們需要單獨封乙個介面來實...

openoffice 安裝與報錯解決

參考bolg 環境 centos 7.5 openoffice4.0 安裝方法 上傳安裝,鏈結位址安裝包 命令安裝 wget tar zxvf apache openoffice 4.0.0 linux x86 64 install rpm zh cn.tar.gz c data soft 2.解壓...

Lua Table介紹與基礎操作

table是lua的一種資料結構用來幫助我們建立不同的資料型別 可以用任意型別的值來作陣列的索引,但這個值不能是 nil。不固定大小的,你可以根據自己需要進行擴容。table常用操作 構造器是建立和初始化表的表示式。表是lua特有的功能強大的東西。最簡單的建構函式是 用來建立乙個空表。初始化陣列 t...