在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在用table.sort 排序的时候注意,如果使用多个条件排序,应在一个排序函数里按照条件优先级进行比较排序。 例如 local t = { {time = 2, i = 1}, {time = 5, i = 2}, {time = 0, i = 2}, {time = 3, i = 4}, {time = 1, i = 5}, {time = 4, i = 2}, } 现要求按 i 排序,i 相同时按 time 排序, 假如用两次排序 1、先用time排序 table.sort(t, function(t1, t2) return t1.time > t2.time end) print("t = {") for i, v in ipairs(t) do print(string.format("\t[%d] = {time = %d, i = %d}", i, v.time, v.i)) end print("}") 排序后结果: t = { [1] = {time = 5, i = 2} [2] = {time = 4, i = 2} [3] = {time = 3, i = 4} [4] = {time = 2, i = 1} [5] = {time = 1, i = 5} [6] = {time = 0, i = 2} } 此时再按 i 排序 table.sort(t, function(t1, t2) return t1.i > t2.i end) print("t = {") for i, v in ipairs(t) do print(string.format("\t[%d] = {time = %d, i = %d}", i, v.time, v.i)) end print("}") 期望 i 相等时(i = 2)能得到和按 time 排序后的一样的相对位置,即: t = { [1] = {time = 1, i = 5} [2] = {time = 3, i = 4} [3] = {time = 5, i = 2} [4] = {time = 4, i = 2} [5] = {time = 0, i = 2} [6] = {time = 2, i = 1} } 然而实际结果却是: t = { [1] = {time = 1, i = 5} [2] = {time = 3, i = 4} [3] = {time = 5, i = 2} [4] = {time = 0, i = 2} [5] = {time = 4, i = 2} [6] = {time = 2, i = 1} } 这应该是table.sort的内部排序算法造成的。 所以,在多个条件下排序需要一个排序函数,只调用table.sort()一次。而且多次排序也影响性能。 table.sort(t, function(t1, t2) if t1.i == t2.i then return t1.time > t2.time else return t1.i > t2.i end end)
|
请发表评论