lua按某些键排序的方法
function sort(list, ...)
local opts = {...};
local len = #opts;
return table.sort(list, function(a, b)
return comp(a, b, opts, 1, len);
end);
end
function comp(a, b, opts, i, len)
if (len >= i) then
local o = opts[i];
local k = o[1];
local asc = o[2] or true;
if (a[k] < b[k] == asc) then return true end;
if (a[k] == b[k]) then return comp(a, b, opts, i+1, len) end;
return false;
end
return false;
end
local l = {
{x=1,y=2,z=1},
{x=1,y=1,z=4},
{x=1,y=4,z=3},
{x=2,y=2,z=6},
{x=1,y=2,z=3},
{x=1,y=2,z=3},
{x=2,y=5,z=3},
{x=3,y=4,z=3},
{x=1,y=2,z=6},
{x=2,y=1,z=3},
{x=3,y=2,z=3},
}
sort(l, {"x",true},{"y",true},{"z",true});
for k,v in ipairs(l) do
print(k,v.x,v.y,v.z);
end
1 1 1 4
2 1 2 1
3 1 2 3
4 1 2 3
5 1 2 6
6 1 4 3
7 2 1 3
8 2 2 6
9 2 5 3
10 3 2 3
11 3 4 3
非递归版本
function sort(list, ...)
local opts = {...};
return table.sort(list, function(a, b)
for i, v in ipairs(opts) do
local k = v[1];
local asc = v[2] or true;
if (a[k] < b[k] == asc) then return true end;
if (a[k] ~= b[k]) then return false end;
end
return false;
end);
end
lua按某些键排序的方法的更多相关文章
- hadoop复合键排序使用方法
在hadoop中处理复杂业务时,需要用到复合键,复合不同于单纯的继承Writable接口,而是继承了 WritableComparable<T>接口,而实际上,WritableCompar ...
- python 字典 分别根据值或键进行排序的方法
最近经常遇到根据字母出现的频率进行排序的题目 我的思路一般是借用字典统计字母出现的频率 然后对字典按照值进行排序 但是每次按照值进行排序时 都会忘记排序方法 在此记录一下,以加深印象 字典原始值如下: ...
- 使 SortList 实现重复键排序
SortList 默认对按Key来排序,且Key值不能重复,但有时可能需要用有重复值的Key来排序,以下是实现方式: 1.对强类型:以float为例 #region 使SortList能对重复键排序 ...
- MySQL删除外键定义的方法
MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外 ...
- discuz x2 个人资料项排序问题解决方法、添加自定义字段、修改栏目名称和介绍
第一次写文章,希望与人提供方便同时,别误人子弟,自己研究的,大家看不懂只改文件就可以了,如果发现不对的地方请回复或直接通知我,谢谢,本来想在discuz论坛上发的,不懂版规也没时间看版规,怕发错,隔小 ...
- Oracle中中文、数字,英文混杂形式的字段进行排序的方法
http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by ...
- 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。
namespace test2 { class Program { /// <summary> /// 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的 ...
- erlang下lists模块sort(排序)方法源码解析(二)
上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...
- erlang下lists模块sort(排序)方法源码解析(一)
排序算法一直是各种语言最简单也是最复杂的算法,例如十大经典排序算法(动图演示)里面讲的那样 第一次看lists的sort方法的时候,蒙了,几百行的代码,我心想要这么复杂么(因为C语言的冒泡排序我记得不 ...
- js按照特定的中文字进行排序的方法
之前遇到过按照中文字符排序的需求很顺利的解决了,这次是按照特定的中文字进行排序,比如按照保守型,稳健型,平衡型,成长型,进取型进行排序. 可以使用localeCompare() 方法来实现中文按照拼音 ...
随机推荐
- nginx 反向代理 (websocket)后报 - 400 bad request
nginx的反向代理. nginx.conf中的配置如下: location / { proxy_http_version 1.1; pro ...
- 【java】MVC模式和三层架构
MVC是一种分层开发的模式 M:Model,业务模型,处理业务,存储数据,获取数据.JavaBean对象 V: View , 视图,界面展示,展示数据.JSP或HTML C: Controller, ...
- 在CentOS 7.4下配置VNC Server服务
安装步骤 1. 查询系统是否安装vnc-server [root@localhost ~]# rpm –qa | grep vnc 如果有返回值,类似于vnc-server-的值,说明已经安装了vnc ...
- 兼容ie8的Html+Css+Js
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset=" ...
- NOI 1.7编程基础之字符串
11:潜伏者 1.描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则: 1. S国军方内部欲发送的原信 ...
- SpringBoot中自动生成实体类及mapper
参考博客: https://blog.csdn.net/qq_35387940/article/details/125777457 1.准备好数据库和表 mysql在windows环境下安装参考: h ...
- 由浅入深学习SAP财务 - 高林旭 PDF 版本
由浅入深学习SAP财务 - 高林旭 PDF 版本 有需要的联系 wx :erpworld
- python torch 解决OSError: [WinError 126] 找不到指定的模块。 Error loading "D:\Anaconda3\lib\site-packages\torch\lib\asmjit.dll" or one of its dependencies.(安装完torch模块后出现找不到指定模块的问题)
昨天安装了一下python的torch模块,然后出现了以下错误: 根据叙述是因为dll文件,后来 经过我的思考...,升级了一下numpy库,就没有问题了. 根据叙述是因为dll文件,后来 经过我的思 ...
- 常见DOS命令及应用
常见DOS命令使用 CMD打开方式 开始 + 系统 + 命令提示符 WIN键 + R 输入cmd + Enter WIN键 + R 输入cmd + Ctrl + Shift + Enter (管理员模 ...
- CRLF和LF的差异
CRLF, LF 是用来表示文本换行的方式.CR(Carriage Return) 代表回车,对应字符 '\r':LF(Line Feed) 代表换行,对应字符 '\n'.由于历史原因,不同的操作系统 ...