最近在用cocos2dx lua写客户端的模块,在写到背包中中遇到要排序的问题。
背包中放有大量的道具,都是用listview来加载这些道具的视图,问题来了。这些道具需要按照顺序来一次排列,每个道具含有等级,颜色,位置。排列的优先级是等级>颜色>位置。
服务器端发来的道具数据,都是无序的。开始的时候,我在想用神马插入排序,但是想想发现,它有三个要排列的属性。等级相同,看颜色大小,颜色大小再相同,就看位置。排序还真是麻烦,而且低效。主程想到了一个很灵巧的方法。他把三个属性粘合在一起。
local keyList = { }
local str = nil
local dataList = { }
for k , v in pairs(data) do
str = data.lv..data.color..data.pos..k
str = tonumber(str)
keyList .key = str
keyList .value = v
table.insert(dataList ,keyList )
end
table.sort(dataList ,function(a,b) return a.key > b.key end)
这样子得到的结果就是一次型排好序的,用pairs循环输出的时候,就可以了。很灵巧的方法吧。还是主程厉害啊