在用lua進行遊戲開發的過程中,很多都有排行榜的需求,如何按照給定的規則進行排序?
這時候就需要用到table.sort了。
假設 一個小怪 有三種屬性,等級(level)、品質(quality)、id(pid)
我們需要對他們進行排序,兩種排序情況,第一是單一屬性排序,比如按照等級進行排序,或者多種屬性進行優先級排序。
根據等級排序
local function tableSort( a, b )
return tonumber( a.level ) > tonumber( b.level )
end
table.sort( tableName, tableSort )
屬性優先級排序
需求如下:
--排列順序優先級從高到低依次爲:
--第一:等級由高到低;
--第二:稀有度由高到低;
--第三:夥伴ID從高到低。
對於lua table的排序,sort函數的使用。比如先按照等級排序,然後按照品質,再按照ID排序。實現方法如下:
--排列順序優先級從高到低依次爲:
--第一:等級由高到低;
--第二:稀有度由高到低;
--第三:夥伴ID從高到低。
local function sort_(a, b)
local r
local al = tonumber(a.level)
local bl = tonumber(b.level)
local aq = tonumber(a.data.quality)
local bq = tonumber(b.data.quality)
local aid = tonumber(a.pid)
local bid = tonumber(b.pid)
if al == bl then
if aq == bq then
r = aid > bid
else
r = aq > bq
end
else
r = al > bl
end
return r
end
table.sort(tableName,sort_)
錯誤的方法
可以參考sort函數實現的原理理解上面的代碼。
如果使用 return al >= bl 這種返回值的話,是錯誤的:如下
local function testSort(a,b)
return tonumber(a.level)>= tonumber(b.level)
end