Lua多重排序

2021-06-29 12:47:49 字數 2521 閱讀 4181

網上有好多排序,不過寫的都大同小異。本文講解下多重排序,意思是多個條件排序。

前提:

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...