最近項目使用到表的排序,我使用table.sort通過表的value排序,使用key進行排序暫未研究。之前一直不是很清楚table.sort這個方法,剛好有機會記錄一下。
方法原型:table.sort (table, funtion(a,b))
兩個入參:1.table-----------需要排序的table
2.function-------排序方法,可自定義。如果不填,則按默認排序。形式是固定的,入參a,b爲排序table中的value1、value2....(這個具體不知道怎麼描述)
1.不傳排序方法,採用自定義:
結果:
可以看到,table.sort默認是使用table中存貯的 value進行從小到大的排序,有一點需要注意的是,如果table中含有number和string,使用默認的方法進行比較會報 number和string比較的錯誤。也有一些別的坑,使用的時候需要謹慎(默認的我用的比較少)
2.傳入自定義的排序方法:
例如傳入的table是 :
傳入的方法的格式是固定的,也就是一個
匿名函數function(a,b)
........(你的實現)
end
匿名函數中的a,b是傳入的table的2個value,table.sort每次會返回兩個value傳入比較函數。上例是t中的value。
比較函數是這樣的:
結果爲:
自定義的比較函數功能十分強大,但是也有一些坑。
注意:
1.table.sort並不穩定,當條件的兩個元素相等時,它們在排序後的相對位置可能會改變(據說,我自己暫未出現,可能用的少)
2.要求需要排序table中間元素不能有nil,否則會報錯
3.當比較的兩個元素相等的時候,比較函數一定要返回false,返回true會報錯,table.sort會根據你返回的bool來判斷兩個value是否保持原來的順序