lua table 排序--滿足多條件排序


前提

假設 一個小怪 有三種屬性,等級(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM