前提

假设 一个小怪 有三种属性,等级(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. sql语句的各种模糊查询

    一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况 ...

  2. thinkphp的field方法的用法

    ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段. 1.用于查询 在查询操作中field方法是使用最频繁的. $Model->fi ...

  3. dede数据库类使用方法 $dsql

    dedecms的数据库操作类,非常实用,在二次开发中尤其重要,这个数据库操作类说明算是奉献给大家的小礼物了. 引入common.inc.php文件 require_once (dirname(__FI ...

  4. IOS第二天多线程-02一次性代码

    ********** #import "HMViewController.h" #import "HMImageDownloader.h" @interface ...

  5. Windows内核 语言选择注意点

    调用约定: 调用约定指的是函数被调用时,会按照不同规则,翻译成不同的汇编代码.当一个函数被调用时,首先会将返回地址压入堆栈,紧接着会将函数的参数依次压入堆栈.不同的调用约定,会指明不同的参数入栈顺序, ...

  6. Sharepoint 2013 网站集的删除与还原

    一.可以通过三种方法删除网站集: 1.打开Sharepoint 2013 管理页面首页 ---> 单击‘应用程序管理(Application Management)’并进入该页面 ---> ...

  7. linux下缓存的查看/修改

    起因: 安装openstack过程中内存不够大,提高内存后想起缓存一般设置为内存的两倍. 缓存的实质是硬盘开辟一个空间,然后设置这个空间为缓存. 查看缓存大小 free -m free -m tota ...

  8. Unable to establish connection to tokens

    安装openstack后遇到的第一个问题. 执行命令nova list得到如下结果: [root@localhost ~(keystone_admin)]# nova list No handlers ...

  9. 14交互活动:XHTML表单

    表单基本上就是带有一块输入信息区域的网页.当提交表单时,表单中的信息被打成一个数据包发送给web服务器,web应用程序对之经行处理.处理完成后,可以获得另一个相应页面. 使用<form>元 ...

  10. linux下python安装到指定目录

    由于使用公司服务器时没有root权限,只能把python安装到个人文件夹下,使用源码包方式安装,这里记录一下. 1.python下载 cd到目录/users/w,在此目录下安装python.通过wge ...