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 ...
随机推荐
- $(function(){})、$(document).ready(function(){})....../ ready和onload的区别
1.window.onload 当一个文档完全下载到浏览器中时,会触发 window.onload 事件. 这意味着页面上的全部元素对 javascript 而言都是可以访问的,这种情况对编写功能性的 ...
- [转]LibreOffice-SDK 开发实战:嵌入MFC-View 和 C# Winform
转自:http://www.aqcoder.com/blog/detail/id/1579bb39-9bcd-4c0f-9b02-67a851148196/ 前面片文章中我简要介绍了下 LibreOf ...
- 关于L'Hopital法则
1.首先需要使用 罗尔定理 函数f(x)在闭区间[a,b]连续在开区间(a,b)可微,如果f(a)=f(b),那么至少存在一点c使函数导数f'(c)=0 注意需要再(a,b)可微,如果函数有角点,断点 ...
- ubuntu14.04上Trac配置记录
系统环境:ubuntu14.04 (并假设Apache2服务可以正常运行) 1. 安装软件: sudo aptitude install trac python-mysqldb 2. 创建数据库Tra ...
- 友盟错误日志分析(转自:COCOACHINA shemy )
在做的项目中,用到了友盟的组件,在没有禁用错误日志上传之前,收集了一些错误日志. 有一些朋友看到了错误日志,却不知道怎么定位到程序的的代码中,实际上,这一步是非常的简单.友盟没有集成.dSYM文件 ...
- 利用office2000组件进行填充打印报不支持集合。 (Exception from HRESULT: 0x80020011 (DISP_E_NOTACOLLECTION))
环境:win2008 64位+.net4.0 +office2000 错误提示: 不支持集合. (Exception from HRESULT: 0x80020011 (DISP_E_NOTACOLL ...
- 透明activity来实现悬浮蔗罩
第一步, activity的代码, 关键代码是进出动画采用淡入淡出方式,让蔗罩出现消失更自然,全屏 public class RobotGuidceV2Activity extends RoboAct ...
- ubuntu 安装apache2并配置cgi,搭建mimetex转化公式图片的服务
一.Apache的安装 在终端输入: sudo apt-get install apache2 二.启动.停止Apache服务 Apache的启动和停止文件是:/etc/init.d/apache2 ...
- SQL 2008无法连接的解决办法
问题: 在从本地客户端连接到SQL 2008的时候出现无法连接的错误.错误信息如下所示:
- Last non-zero Digit in N!(阶乘最后非0位)
Last non-zero Digit in N! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...