網上有好多排序,不過寫的都大同小異。本文講解下多重排序,意思是多個條件排序。
前提:
1.lua排序的原理是氣泡排序,即從前往後比較,滿足一定條件a則交換,否則不交換。
2.lua排序函式table.sort(tbl, sortfunc), sortfunc中會比較前後表中前後兩個值,sortfunc函式返回true則不交換,返回false則交換。
例子:
table_demo = ,
[2] = ,
[3] = ,
[4] = ,
[5] = ,
}
目標:將table_demo 按照sum從小到大排序, 若sum大小相等則按照quality從小到大排序, 如果quality一樣大,則按create_time從小到大排序(ps: create_time大小設定是都不同的)。
**如下:
function
sortfunc(a, b)
ifa.sum == b.sum
then
ifa.quality == b.quality then
return
a.creat_time < b.creat_time
else
return
a.quality < b.quality
endelse
return
a.sum
< b.sum
endend
table.sort(table_demo, sortfunc)
for k=1, 5
do print("-----", k, table_demo[k].creat_time, table_demo[k].quality, table_demo[k].sum)
end
結果:
—– 1 13 1 1
—– 2 12 1 2
—– 3 11 1 4
—– 4 14 1 5
—– 5 15 1 7
note:
多重排序的個性案例, 根據present_person_num == 10排序,兩類再根據quality 排序。
function
selectroomview:sortroomlist(room_list_old)
local sortfunc = function (a, b)
local time1 = 0
local time2 = 0
ifa.msg_banquet_room_info.present_person_num == 10
then
time1 = 1
end if b.msg_banquet_room_info.present_person_num == 10
then
time2 = 1
end if
a.msg_banquet_room_info.present_person_num == b.msg_banquet_room_info.present_person_num then
ifa.msg_banquet_room_info.quality == b.msg_banquet_room_info.quality then
return
a.msg_banquet_room_info.create_time > b.msg_banquet_room_info.create_time
else
return
a.msg_banquet_room_info.quality > b.msg_banquet_room_info.quality
endelseif a.msg_banquet_room_info.present_person_num < b.msg_banquet_room_info.present_person_num then
if time2 == 0
then
ifa.msg_banquet_room_info.quality == b.msg_banquet_room_info.quality then
return
a.msg_banquet_room_info.create_time > b.msg_banquet_room_info.create_time
else
return
a.msg_banquet_room_info.quality > b.msg_banquet_room_info.quality
endelse
return
true
end else
return
false
end end
local room_list_new = room_list_old
table.sort(room_list_new, sortfunc)
return room_list_new
end
go 多重排序 堆排序
記錄一下go實現多重排序的方法和實現堆排序的方式 實現sort介面即可用sort.sort 方法對物件進行排序,而多重排序呢,我想傳入不同排序規則,然後讓該物件依次執行不同規則 排序規則 type lessfunc func p1,p2 curriculumelem bool multisorter...
Oracle,SQL多重排序 多欄位排序
我們在查詢出資料的時候,需要根據某幾個字段進行排序。比如 查詢車輛的時候,根據車輛的型別或者註冊時間查詢車輛資訊,然後根據車輛的號碼排序,再根據車輛型別進行排序,再或者根據車輛的註冊時間進行排序。具體的查詢語句應該是 sql select hphm,hpzl,time from car where ...
oracle,SQL多重排序 多欄位排序
我們在查詢出資料的時候,需要根據某幾個字段進行排序。比如 查詢車輛的時候,根據車輛的型別或者註冊時間查詢車輛資訊,然後根據車輛的號碼排序,再根據車輛型別進行排序,再或者根據車輛的註冊時間進行排序。具體的查詢語句應該是 select hphm,hpzl,time from car where time...