Lua 表的排序,table.sort應用

       最近項目使用到表的排序,我使用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是否保持原來的順序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章