前提
假設 一個小怪 有三種屬性,等級(level)、品質(quality)、id(pid)
我們需要對他們進行排序,兩種排序情況,第一是單一屬性排序,比如按照等級進行排序,或者多種屬性進行優先級排序。
根據等級排序
local function testSort(a,b) return tonumber(a.level)> tonumber(b.level) end table.sort(tableName,testSort)
屬性優先級排序
需求如下:
--排列順序優先級從高到低依次為: --第一:等級由高到低; --第二:稀有度由高到低; --第三:伙伴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