【步兵 lua】簡潔的排序

【步兵 lua】快捷排序 by EOS.

好久沒更新了,怒刷一下存在感。

前幾天,做一些選項排序相關的功能,遇到一個小問題,然後把解決方法分享一下。

其實就是一些簡單的排序,舉個例子:
比如裝備,一會要按照 品質-評分-等級 排序,一會又要按照 評分-品質-等級 排序,
再複雜點的比如 拍賣行 售價之類的,倒騰來倒騰去,寫了幾個就給我寫煩了。
就這麼幾個key來回折騰,煩不煩喲~於是我就關掉項目去寫Demo了。


首先你要有一個小目標

目標:一個table,一個keylist 搞定排序功能。

先上結果:
這裏寫圖片描述


源碼

(ps:前邊加下劃線,可以避免智能提示過多的困擾
 pss:前提是,你不是私有下劃線流)
local function _sortNextKey_(a,b,list)
    if a == b then return false end
    if list.idx == nil then
        list.idx = 0
    end
    list.idx = list.idx + 1
    local key = list[list.idx]

    if key then
        if string.find(key, "%.") then
            local tmpA = a
            local tmpB = b
            for tmpKey in string.gmatch(key, "[^%.]+") do
                tmpA = tmpA[tmpKey]
                tmpB = tmpB[tmpKey] 
                if tmpA == nil then list.idx = 0 return false end
                if tmpB == nil then list.idx = 0 return true end
            end

            if tmpA == tmpB then
                return _sortNextKey_(a,b,list)
            else
                list.idx = 0
                return tmpA > tmpB
            end
        else
            if a[key] == nil then list.idx = 0 return false end
            if b[key] == nil then list.idx = 0 return true end

            if a[key] == b[key] then
                return _sortNextKey_(a,b,list)
            else
                list.idx = 0
                return a[key] > b[key]
            end
        end
    else
        list.idx = 0
        return false
    end
end

function table.sortByKey(list, sortKeyList)
    table.sort(list, function (a,b)
        return _sortNextKey_(a,b,sortKeyList)
    end)
end

(ps:腳本用的越多越感覺c++不會寫了,難道是被慣壞了?)

也算是一個很實用的功能=。= 雖然不難,可能大家也早就寫過此類功能,
不過還是希望給一部分人提供一些思路,讓我們一起來書寫簡單,而又明瞭的代碼吧。

See Again~
之前
真愛無價,歡迎打賞~
讚賞碼

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