博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua表排序
阅读量:6864 次
发布时间:2019-06-26

本文共 2075 字,大约阅读时间需要 6 分钟。

对于lua的table排序问题,一般的按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之下,如果表内既有string,number类型,则会因为两个类型直接compare而出错,所以需要自己写func来转换一下;也可根据自己的需要在此func中 添加相应的逻辑来达到你的 排序要求);

local test_table = {
2,1,3,"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 -- 输出如下:1 sort2 SORT3 34 25 1

若要进行对表进行按照 键值对key值来进行排序,只是输入的话,目测可以这样:

local test_table = {a=3,b=2,c=4,d=1}  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,0endlocal function iter(a, i)    i = i + 1    local v = a[i]    if v then        return i, v    else        return nil, nil    endenda = {
"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 = 10, luaH_get = 24, luaH_present = 48,}function pairsByKeys(t, f) local a = {} for n in pairs(t) do table.insert(a, n) end table.sort(a, f) local i = 0 -- iterator variable local iter = function () -- iterator function i = i + 1 if a[i] == nil then return nil else return a[i], t[a[i]] end end return iterendfunction sortFunc(a , b) if tostring(a) > tostring(b) then return true endendfor name, line in pairsByKeys(lines , sortFunc) do print(name, line)end

输出地结果如下:

name    jeffluaH_set    10luaH_present    48luaH_get    241    table: 027EE6E8[Finished in 0.1s]

如此这般 即可实现表按照键值对的排序了;这样的实现方式其实与上述将table的索引存入一个temp表中,并将此temp表按func排序;只不过这里 使用闭包,将此处理放置在了一个方法内来替代pairs罢了;

关于泛型for的文章,可参看这边文章:

参考Bolg :

转载于:https://www.cnblogs.com/jadeboy/p/4101732.html

你可能感兴趣的文章
将mnist数据集存储到本地文件
查看>>
买房签定金合同或转让合同之前需要了解到的一些问题
查看>>
C#数据导出Excel详细介绍
查看>>
f5基本介绍
查看>>
Silverlight中本地化的实现(语言切换)
查看>>
应用程序完全退出
查看>>
MemberShip使用大全
查看>>
anonymous
查看>>
android 读取sd卡中的图片
查看>>
mysqldump定时备份数据库
查看>>
Servlet
查看>>
工银亚洲见证开户详细过程和攻略
查看>>
18-python基础7-闭包函数和装饰器
查看>>
RESTful杂记
查看>>
c语言编程
查看>>
forget word a out 1
查看>>
poj 1719
查看>>
如何使用资源和样式调整控件外观
查看>>
教程-Delphi编译就报毒
查看>>
问题-[ACCESS2007]怎么显示MsysObjects
查看>>