Lua table.sort的應用

在用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

 

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