lua 非ipairs结构的table.sort()实现
2020-02-04 03:44
357 查看
lua 非ipairs结构的table.sort()实现
上次说到非ipairs结构的table使用table.sort()时,结果花里胡哨的问题,今天来说说如何解决这个问题。
思路:既然原来的数据是非ipairs结构,那么就将原来的table转化成ipairs结构的table-1。将table-1进行table.sort(),再将结果导出即可。
在写下上面这段话后,我开始编写代码。但是,万万没想到啊,你们先看看下面的代码。
代码:
function tableSort(t,callback) -- body local tempTable ={} local returnTable = {} for k,v in pairs(t) do local tempValue = {} tempValue.key = k tempValue.value = v table.insert(tempTable,tempValue) end if callback then table.sort(tempTable,callback) else table.sort(tempTable, function (a,b) return a.value < b.value end) end for i,v in ipairs(tempTable) do returnTable[v.key] = v.value end return returnTable end local able = { [401] = "a", [403] = "d", [404] = "b", [406] = "c" } able = tableSort(able) for k,v in pairs(able) do print(k,v) end
结果:
404 b 401 a 406 c 403 d [Finished in 0.1s]
问题出在了returnTable[v.key] = v.value这段代码,我将值按照顺序赋值过去后,他的遍历顺序居然是按照key的hash值来的。那么要怎么处理这个问题呢?对不起,我还是个菜鸡。所以,我决定直接绕过这个问题一步到位,直接把这个函数变成遍历迭代器。
代码:
function tableSortPairs(t,callback) -- body local tempTable ={} local returnTable = {} for k,v in pairs(t) do local tempValue = {} tempValue.key = k tempValue.value = v table.insert(tempTable,tempValue) end if callback then table.sort(tempTable,callback) else table.sort(tempTable, function (a,b) return a.value < b.value end) end local count = 0 return function () -- body count = count + 1 if tempTable[count] then return tempTable[count].key,tempTable[count].value end end end local able = { [401] = "a", [403] = "d", [404] = "b", [406] = "c" } for k,v in tableSortPairs(able) do print(k,v) end
结果:
401 a 404 b 406 c 403 d [Finished in 0.1s]
在写的时候还遇到一个小问题,这里篇幅太长,下一篇再说。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- js实现table排序(jQuery下的jquery.sortElements)
- jquery dragsort table实现拖拽排序
- lua table.sort的bug
- stl实现结构体排序关键语法要点(sort)
- lua的table.sort 中出现 invalid order function for sorting
- 数据结构实现之Table(符号表,内部存储key-value对)
- 自己实现lua table
- Lua面向对象编程系列-通过Table和Closure来实现类机制
- lua的table.sort 中出现 invalid order function for sorting
- 如何在Lua与C/C++之间实现table数据的交换
- lua 如何输出树状结构的table?
- Lua面向对象编程系列-通过Table和Metatable来实现类机制
- LUA 排序算法和性能分析[1]:table.sort
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- 用jquery.sortElements实现table排序
- lua混淆内存table的实现
- Lua 中 table.sort 的比较函数
- 使用JPA的@SecondaryTable来实现hibernate的混合使用“每个类分层结构一张表”和“每个子类一张表”的功能
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- lua的table实现以及遍历方式