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

前提

假設 一個小怪 有三種屬性,等級(level)、品質(quality)、id(pid)函數

咱們須要對他們進行排序,兩種排序狀況,第一是單一屬性排序,好比按照等級進行排序,或者多種屬性進行優先級排序。lua

根據等級排序

    local function testSort(a,b)
        return tonumber(a.level)> tonumber(b.level)
    end
    table.sort(tableName,testSort)

 

屬性優先級排序

需求以下:spa

    --排列順序優先級從高到低依次爲:
    --第一:等級由高到低;
    --第二:稀有度由高到低;
    --第三:夥伴ID從高到低。

對於lua table的排序,sort函數的使用。好比先按照等級排序,而後按照品質,再按照ID排序。實現方法以下:code

 

    --排列順序優先級從高到低依次爲:
    --第一:等級由高到低;
    --第二:稀有度由高到低;
    --第三:夥伴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函數實現的原理理解上面的代碼。 blog

若是使用 return al >= bl 這種返回值的話,是錯誤的:以下排序

    local function testSort(a,b)
        return tonumber(a.level)>= tonumber(b.level)
    end
相關文章
相關標籤/搜索