LUA中table的排序問題

2021-07-22 02:22:24 字數 1273 閱讀 5552

畢業了,正式工作了,隨便寫寫。

目前在實習,接觸的是u3d遊戲開發,設計到語言有erlang,c#,lua。最近在做揹包的排序的時候遇到的乙個小問題就貼出來了。

檢視官方文件

第乙個引數是乙個table,第二個引數是外部函式,如下**

table.sort(showlist, sortfunc);

local function itemsortfunc(item1, item2)

if tb.itemtable[item1.sid].item_type == tb.itemtable[item2.sid].item_type then

return tb.itemtable[item1.sid].level > tb.itemtable[item2.sid].level;

endreturn tb.itemtable[item1.sid].item_type < tb.itemtable[item2.sid].item_type;

end

第二個引數返回值為boolean型別,此函式應滿足以下條件: 接受兩個引數(依次為a, b), 並返回乙個布林型的值, 當a應該排在b前面時, 返回true, 反之返回false.

例如, 當我們需要降序排序時, 可以這樣寫:

> sortfunc = function(a, b) return b < a end

> table.sort(tbl, sortfunc)

> print(table.concat(tbl, ", "))

gamma, delta, beta, alpha

用類似的原理還可以寫出更加複雜的排序函式. 例如, 有乙個table存有工會三名成員的姓名及等級資訊:

guild = {}

table.insert(guild, )

table.insert(guild, )

table.insert(guild, )

對這個table進行排序時, 應用以下的規則: 按等級公升序排序, 在等級相同時, 按姓名公升序排序.

可以寫出這樣的排序函式:

function sortlevelnameasc(a, b)

if a.level == b.level then

return a.name < b.name

else

return a.level < b.level

endend

lua中對table的排序

lua中對table的排序一般是用lua自帶的table.sort 函式排序,一般不採用自己寫的排序的方式,以下來說一說 table.sort 排序和在工作中遇到的問題 1.排序的方式 table.sort tbl,function a,b return a b end 以上是乙個簡單的例子,得到的...

lua中table引用問題

loacl a loacl b a a nil 雖然lua table的賦值是引用,修改a或b會同時修改。但是如果對a nil,此時b 還是指向原來的 本質上就是a和b指向同一塊記憶體位址,a nil只是將指標賦空,b還持有對該記憶體的引用 在物件導向的語言中,我們經常將乙個物件的指標或引用存到另乙...

Lua中對table排序例項

這篇文章主要介紹了lua中對table排序例項,本文講解了lua中對table的一般排序方法 針對值的排序 同時對鍵值進行排序等方法,需要的朋友可以參考下 lua中利用到的排序的基本上就是建構函式 table 了,為了便於和c區分開來,我俗稱它為表單。例項 原理就是lua整合的冒泡演算法 排序的一般...