lua表排序
对于lua的table排序问题,一般的按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之下,如果表内既有string,number类型,则会因为两个类型直接compare而出错,所以需要自己写func来转换一下;也可根据自己的需要在此func中 添加相应的逻辑来达到你的 排序要求);
local test_table = {,,,"SORT","sort"}
table.sort(test_table , function(a , b)
return tostring(a) > tostring(b)
end)
for key,value in pairs(test_table) do
print(key,value)
end
-- 输出如下:
sort
SORT
若要进行对表进行按照 键值对key值来进行排序,只是输入的话,目测可以这样:
local test_table = {a=,b=,c=,d=}
local key_table = {}
--取出所有的键
for key,_ in pairs(test_table) do
table.insert(key_table,key)
end
--对所有键进行排序
table.sort(key_table)
for _,key in pairs(key_table) do
print(key,test_table[key])
end
但是这样子仅仅能够使得print输入时达到这个目的,而table本身并没有因此而改变,所以这样是不可取的; 我们可以改变泛型for的迭代因子来达到这个目的的:
function ipairs2(a)
return iter,a,
end local function iter(a, i)
i = i +
local v = a[i]
if v then
return i, v
else
return nil, nil
end
end a = {"one","two","three"}
for k,v in ipairs2(a) do
print(k, v)
end
--输出结果为:
--1 one
--2 two
--3 three
如此是达到我们的目的了,但是这个只能支持下表为整形的table(即是 放在table数组部分的表,hash部分却未能为力);所以需要类似这样子:
lines = {
name = "jeff",
{"pairsByKeys"},
luaH_set = ,
luaH_get = ,
luaH_present = ,
}
function pairsByKeys(t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = -- iterator variable
local iter = function () -- iterator function
i = i +
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
function sortFunc(a , b)
if tostring(a) > tostring(b) then
return true
end
end
for name, line in pairsByKeys(lines , sortFunc) do
print(name, line)
end
输出地结果如下:
name jeff
luaH_set
luaH_present
luaH_get
table: 027EE6E8
[Finished in .1s]
如此这般 即可实现表按照键值对的排序了;这样的实现方式其实与上述将table的索引存入一个temp表中,并将此temp表按func排序;只不过这里 使用闭包,将此处理放置在了一个方法内来替代pairs罢了;
关于泛型for的文章,可参看这边文章:Click Here
参考Bolg : Click Here
lua表排序的更多相关文章
- LUA 表排序
t = { [] = , [] = , [] = } for k, v in pairs(t) do--注意这个输出顺序是没有规律的!!! print(k, v) end local keys = { ...
- <4>Lua表
lua表 1: lua没有数组,但是表可以代替数组的功能(数组部分与非数组部分); 开始的, 1, 2, 3 ...称连续的索引; b.Lua表的连续索引的长度(数组部分); #表的名字; --数组 ...
- Lua表(table)的用法_个人总结
Lua表(table)的用法_个人总结 1.表的创建及表的介绍 --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意 ...
- LUA表克隆方法归纳
lua表克隆 将lua一个表, 克隆出一份为一个独立的另外一个表. 对于一个module, 如果在require之后,获得的表对象, 不能直接修改, 例如lua缓存此表, 但是多次逻辑执行, 都使用的 ...
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- heap表和iot表排序规则不同
heap 和iot 对比 OBJECT_NAME OBJECT_TYPE --------------------------------------------------------------- ...
- lua table排序报错与解决
lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...
- 160628、利用Oracle rownum让表排序字段值连续
利用Oracle rownum让表排序字段值连续 1.需求说明 表(eval_index)中有字段如下: 表字段 描述 说明 ID 主键 GROUP_ID 分组编号 SORT_NUM 排序序号 按照分 ...
- lintcode-98-链表排序
98-链表排序 在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序. 样例 给出 1->3->2->null,给它排序变成 1->2->3->nu ...
随机推荐
- UI基础之UIButton相关
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 1.按钮透明效果 btn.alpha = 0.8; 2.按钮圆角处理 btn ...
- 用js效果做的简单焦点图
/*js代码*/ <script src="js/js/myfocus-2.0.1.min.js" type="text/javascript">& ...
- codeIgniter怎么实现对input type=text对话框blur事件的监听以及传值?
如题,这个问题怎么解决? 用JS和前端框架习惯了,现在学后端框架,感觉各种坑...
- springboot maven install 找不到符号
好多朋友在网上找maven install 找不到符号,我今天也遇到了同样的问题,我项目结构如下: 在multicreate-web这个项目引用了multicreate-service的jar包,在i ...
- g++编译选项
-g,生成供调试用的可执行文件,可以在gdb中运行.由于文件中包含了调试信息因此运行效率很低,且文件也大不少. -c:生成名为source_file.o的目标文件. -o, 指定输出文件名,可以配合以 ...
- jboss hello world
http://developers.redhat.com/products/devstudio/get-started/ 1. 下载 Red Hat JBoss Developer studio 2. ...
- 使用TableViewRow完成下拉菜单效果
在TableViewRow标签中增加一个属性opened(自己定义的)=true or false 用于标记当前row的状态 然后用table_view.deleteRow()方法 参数 ...
- 织梦cms、帝国cms、PHPcms优缺点解析
php才是建站的主流,cms这类程序又是用的最多的,占据主流的cms主要就是织梦,帝国,phpcms这三种的,这三个程序都是开源程序.国内用户众多. 一.从美观性来说(以官方默认模版为准 ph ...
- ubuntu12.04网络配置
1.配置/etc/network/interfaces #静态IP地址 auto lo iface lo inet loopback #loopback虚拟网络设备,使TCP/IP能以127.0.0. ...
- HashSet和HapMap取distinct value
public class TestHashSetAndHashMap { private final int setNum=5000; @Test public void doTest(){ List ...