【步兵 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~
之前
真愛無價,歡迎打賞~