对于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表排序的更多相关文章

  1. LUA 表排序

    t = { [] = , [] = , [] = } for k, v in pairs(t) do--注意这个输出顺序是没有规律的!!! print(k, v) end local keys = { ...

  2. <4>Lua表

    lua表 1: lua没有数组,但是表可以代替数组的功能(数组部分与非数组部分); 开始的, 1, 2, 3 ...称连续的索引; b.Lua表的连续索引的长度(数组部分);  #表的名字; --数组 ...

  3. Lua表(table)的用法_个人总结

    Lua表(table)的用法_个人总结 1.表的创建及表的介绍 --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意 ...

  4. LUA表克隆方法归纳

    lua表克隆 将lua一个表, 克隆出一份为一个独立的另外一个表. 对于一个module, 如果在require之后,获得的表对象, 不能直接修改, 例如lua缓存此表, 但是多次逻辑执行, 都使用的 ...

  5. Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  6. heap表和iot表排序规则不同

    heap 和iot 对比 OBJECT_NAME OBJECT_TYPE --------------------------------------------------------------- ...

  7. lua table排序报错与解决

    lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...

  8. 160628、利用Oracle rownum让表排序字段值连续

    利用Oracle rownum让表排序字段值连续 1.需求说明 表(eval_index)中有字段如下: 表字段 描述 说明 ID 主键 GROUP_ID 分组编号 SORT_NUM 排序序号 按照分 ...

  9. lintcode-98-链表排序

    98-链表排序 在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序. 样例 给出 1->3->2->null,给它排序变成 1->2->3->nu ...

随机推荐

  1. QQ在线客服JS代码,自适应漂浮在网页右侧

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  2. javascript code snippet -- 保留小数点位数

    js1.5以上可以利用toFixed(x) ,可指定数字截取小数点后 x位 for example : //round "original" to two decimals var ...

  3. 学习maven的使用,看到一篇很实用的入门教程(菜鸟级入门)

    一.前言         早就知道maven 在java 项目的管理方面名声显赫,于是就想着学习掌握之,于是查阅了大量文档.发现这些文档的作者都是java 的大腕,大多都是站在掌握了一定maven 基 ...

  4. session和cookie的简单理解

    0. 引子,我们为什么要cookie和session       因为http请求是无状态的(不能记录用户的登录状态等),所以需要某种机制来保存用户的登录状态等信息,在下次访问web服务的时候,不用再 ...

  5. centos下postgresql的安装与配置[转]

    本文摘自:http://blog.chinaunix.net/uid-24846094-id-78490.html 一.安装(以root身份进行) 1.检出最新的postgresql的yum配置从ht ...

  6. 第十三章:降维:主成分分析PCA

  7. Hyper-V初涉_Hyper-V虚拟机文件交换

    使用虚拟机时,文件交互就显得十分重要.如果能实现物理机与虚拟机之间的文件交互,将会节省大量的时间.比较可惜的是,Hyper-V虚拟机并不支持USB存储设备,所以在文件交换上略显麻烦. 与Hyper-V ...

  8. HashMap LinkedHashMap源码分析笔记

    MapClassDiagram

  9. [收集]在iPhone桌面的应用程序图标右上角显示数字

    能够在ios桌面的程序icon右上角显示数字(badge number)的方法 在ViewController中的viewDidLoad方法中添加如下代码即可 - (void)viewDidLoad ...

  10. project.VERSION_NAME定义

    android { compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) buildToolsVersion pr ...