前提

假设 一个小怪 有三种属性,等级(level)、品质(quality)、id(pid)

我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序。

根据等级排序

    local function testSort(a,b)
return tonumber(a.level)> tonumber(b.level)
end
table.sort(tableName,testSort)

属性优先级排序

需求如下:

    --排列顺序优先级从高到低依次为:
--第一:等级由高到低;
--第二:稀有度由高到低;
--第三:伙伴ID从高到低。

对于lua table的排序,sort函数的使用。比如先按照等级排序,然后按照品质,再按照ID排序。实现方法如下:

    --排列顺序优先级从高到低依次为:
--第一:等级由高到低;
--第二:稀有度由高到低;
--第三:伙伴ID从高到低。
local function sort_(a, b)
local r
local al = tonumber(a.level)
local bl = tonumber(b.level)
local aq = tonumber(a.data.quality)
local bq = tonumber(b.data.quality)
local aid = tonumber(a.pid)
local bid = tonumber(b.pid)
if al == bl then
if aq == bq then
r = aid > bid
else
r = aq > bq
end
else
r = al > bl
end
return r
end
table.sort(tableName,sort_)
 

错误的方法

可以参考sort函数实现的原理理解上面的代码。

如果使用 return al >= bl 这种返回值的话,是错误的:如下

    local function testSort(a,b)
return tonumber(a.level)>= tonumber(b.level)
end

lua table 排序--满足多条件排序的更多相关文章

  1. [Python] dict字典排序和多条件排序

    利用lambda实现排序:要实现多条件排序,只需要依次指定排序的标准,具体实现如下 counter = {'是': 1, '不是': 1, '你': 3} counter_list = sorted( ...

  2. [Lua]table(二):删除与排序

    function PrintTable(tb) for k,v in pairs(tb) do print(v) end print("-------------------") ...

  3. python下使用sort()函数对目录下文件名进行多条件排序

    目录 1.基础函数 2.例子解析 参考 1.基础函数 a.sort()函数 sort()函数的作用是对列表内容进行正向排序,直接在原列表进行修改,返回的是修改后的列表. lists =[1, 5, 1 ...

  4. lua table排序报错与解决

    lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...

  5. Lua table.sort排序

    在用table.sort 排序的时候注意,如果使用多个条件排序,应在一个排序函数里按照条件优先级进行比较排序. 例如 local t = { {time = , i = }, {time = , i ...

  6. js 数组sort, 多条件排序。

    Array.sort(); sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序. 一般用法:(数组元素从小大进行排序) var a = [9, 6, 5, 7, 11, 5 ...

  7. Javascript 迭代法实现数组多条件排序

    多条件排序可能有很多种思路,效率也各不相同,我的方法可能只适合自己用,毕竟目的是为了实现功能,所以采用了最笨的方法,不过效果还是很理想的,经过多次测试,6列1000行数据,平均排序时间大约是:28ms ...

  8. Oracle order by case when 多条件排序

    ORACLE sql 排序 根据两个条件排序,根据id号由小到大排序,同时country字段是北京的排最前面前面,其次上海,..大连,最后是其他城市,怎么写? 写法如下:select * from p ...

  9. 飘逸的python - 多条件排序及itemgetter的应用

    曾经客户端的同事用as写一大堆代码来排序,在得知python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣. 之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相 ...

随机推荐

  1. 行业集中度(Concentration Ratio)

    行业集中度是决定市场结构最基本.最重要的因素,集中体现了市场的竞争和垄断程度,经常使用的集中度计量指标有:行业集中率(CRn指数).赫尔芬达尔—赫希曼指数(Herfindahl-HirschmanIn ...

  2. 类 class

    <?php class Person{ //定义一个类 public $name; //定义属性 public $age; function say(){ //定义办法 echo "m ...

  3. 【iCore3 双核心板】例程九:ADC实验——电源监控

    实验指导书及代码包下载: http://pan.baidu.com/s/1o7wSEO6 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  4. Windows7如何安装Sqlite3

    Sqlite官网地址:http://www.sqlite.org/ Sqlite3文件下载: 1.下载 sqlite-dll-win32-x86-3140100 2.下载 sqlite-tools-w ...

  5. 使用SharpSSH连接服务器报Algorithm negotiation fail解决办法

    SharpSSH或JSCH使用diffie-hellman-group1-sha1和diffie-hellman-group-exchange-sha1密钥交换算法,而OpenSSH在6.7p1版本之 ...

  6. Cannot create a server using the selected type.

    1.退出 eclipse 2.到[工程目录下]/.metadata/.plugins/org.eclipse.core.runtime 3.把org.eclipse.wst.server.core.p ...

  7. 【ionic】Mac IOS下真机调试

    模拟调试不能保证真机一定没问题,所以真机调试是非常必要的一步 IOS设备 启用设备调试 在IOS设备中(Iphone,Ipad)中开始web检测器 设备->safari->高级->w ...

  8. c语言-交换两个整数

    使用c来写一个函数来实现交换两个整数. 第一种 一般的方法,引用中间变量,方便快捷. void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = t ...

  9. entity.Student@150f3932, entity.Student@1a740c6b 没有实体中的数据

    public class AppServerAction extends BaseAction {    /**     *      */ /**      * 初始化 “我的产品”列表 JSP页面 ...

  10. LeetCode Two Sum III - Data structure design

    原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...