好久沒更新了,怒刷一下存在感。
前幾天,做一些選項排序相關的功能,遇到乙個小問題,然後把解決方法分享一下。
其實就是一些簡單的排序,舉個例子:
比如裝備,一會要按照 品質-評分-等級 排序,一會又要按照 評分-品質-等級 排序,
再複雜點的比如 拍賣行 售價之類的,倒騰來倒騰去,寫了幾個就給我寫煩了。
就這麼幾個key來回折騰,煩不煩喲~於是我就關掉專案去寫demo了。
目標:乙個table,乙個keylist 搞定排序功能。
(ps:前邊加下劃線,可以避免智慧型提示過多的困擾
pss:前提是,你不是私有下劃線流)
local
function
_sortnextkey_(a,b,list)
ifa == 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
ifstring.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
endelse
ifa[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]
endend
else
list.idx = 0
return
false
endend
function
table.sortbykey(list, sortkeylist)
table.sort(list, function (a,b)
return
_sortnextkey_(a,b,sortkeylist)
end)
end
(ps:指令碼用的越多越感覺c++不會寫了,難道是被慣壞了?)
也算是乙個很實用的功能=。= 雖然不難,可能大家也早就寫過此類功能,
不過還是希望給一部分人提供一些思路,讓我們一起來書寫簡單,而又明了的**吧。
see again~
之前 真愛無價,歡迎打賞~
快速排序的簡潔寫法
個人總結的兩種寫法,比較傾向於partition1,乙個邊界畢竟比兩個邊界好控制。此處 基於c 其實也就是用了個vector而已,隨便改改其他語言都可以。好多寫法都可以滿足普通情況,但不滿足特殊用例測試 1,1,1,3這種。共享。include stdafx.h include iostream i...
簡潔 js排序演算法
演算法基礎 展平陣列 使用.只能展平兩層 遞迴演算法 console.log flatten arr 函式節流演算法 距離上次執行超過60毫秒,才能執行 思路 執行throttle後 lock就是一把鎖,只有當lock為false時才執行func,這把鎖需要throttle距離上次執行相隔60毫秒才...
最簡潔的堆排序實現
public class sort heapsort arr for int i 0 i arr.length i public static void heapdown int array,int parent,int length array parent temp public static ...