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() 方法来实现中文按照拼音 ...
随机推荐
- linuxz中压缩解压缩文件
压缩解压缩.tar格式文件: 把文件打包为tar.gz命令: tar -zcvf 文件名.tar.gz 要压缩的文件/文件夹 ...
- satpy 处理卫星 FY4A 数据
读取数据并画图 import os import glob from datetime import datetime, timedelta from satpy.scene import Scene ...
- debian最小化安装+sway记录
1. 最小化安装系统,只安装最基础的系统,如果是虚拟机中安装,安装SSH服务器可能更方便在宿主机终端操作客户机.deiban的安装器里有提供基础工具包的安装项,如果为了系统纯净不安装,可能会导致更多不 ...
- onActivityResult 解耦 不需要一层一层的写
public abstract class AbsShareMessageTemplates implements IShareMessageTemplates { public final stat ...
- Hyper-V虚拟机在Win2019server中共用一个公网IP
Hyper-V虚拟机在Win2019server中共用一个公网IP 有时生产环境中希望一台宿主机上的多台虚拟机共用一个IP出口,按以下操作处理即可. 环境: Windows 2019 server D ...
- 回溯-1-N皇后(Backtracking-1-N Queens)
#include <stdio.h> #define N 4 enum bool {TRUE, FALSE}; void print_Q(int *Q) { int i; for (i = ...
- 《Django 3 Web应用开发从零开始学(视频教学版)》源码课件教学视频免费下载
#好书推荐##好书奇遇季#<Django 3 Web应用开发从零开始学(视频教学版)>,配书资源文后提供了下载二维码.京东当当天猫都有发售. https://item.jd.com/133 ...
- gl-ar750 配置
镜像下载https://docs.gl-inet.com/en/3/release_notes/gl-ar750/设置sd卡安装软件https://openwrt.org/docs/guide-use ...
- IIS添加MIME类型实现未知文件下载
application/octet-stream 无需重启
- 如何把高德地图搜索结果导出成excel里?
前段时间,根据朋友的要求,开发了百度地图里的商家采集工具. 最近,又开发了腾讯地图里的商家采集工具. 来了兴致,干脆把高德地图的采集工具也一并搞定!:) 原理应该差不多,我就查阅了下高德地图的采集规则 ...