按键名对 Lua 表进行排序
2016-10-15 20:27:26
收藏:0
阅读:149
评论:4
我浏览了很多问题和谷歌搜索结果,但找不到解决方案。
我正在尝试使用Lua中的table.sort函数对表进行排序,但我无法弄清楚如何使用它。
我有一个表,其键是随机数值。 我希望按升序对它们进行排序。 我也浏览了Lua维基页面,但table.sort仅适用于表值。
t = { [223]="asd", [23]="fgh", [543]="hjk", [7]="qwe" }
我希望它像这样:
t = { [7]="qwe", [23]="fgh", [223]="asd", [543]="hjk" }
点赞
用户4093928
@lhf 所说的是真的,Lua 表按照实现方式找到的任何顺序来保存它们的内容。但是,如果你想以排序的方式打印(或迭代),这是可能的(这样你可以逐个元素比较它们)。为了实现这一点,可以按照以下方式操作:
for key, value in orderedPairs(mytable) do
print(string.format("%s:%s", key, value))
end
不幸的是,Lua 没有提供 orderedPairs 函数,但你可以从 [这里](http://lua-users.org/wiki/SortedIteration)复制实现。
2014-10-02 13:28:22
用户1442917
你不能使用pairs来设置从哈希表(也就是你的表)中检索元素的顺序。你需要从表中获取键,将键作为它自己的表进行排序,然后使用这些排序后的键从你的原始表中检索值:
local t = {[223]="asd", [23]="fgh", [543]="hjk", [7]="qwe"}
local tkeys = {}
-- populate the table that holds the keys
for k in pairs(t) do table.insert(tkeys, k) end
-- sort the keys
table.sort(tkeys)
-- use the keys to retrieve the values in the sorted order
for _, k in ipairs(tkeys) do print(k, t[k]) end
这将输出:
7 qwe
23 fgh
223 asd
543 hjk
另一个选择是提供你自己的迭代器来迭代表,以你需要的顺序,但是排序键可能足够简单以满足你的需求。
2014-10-02 17:50:50
用户1624512
Lua sort文档提供了一个好的解决方案
local function pairsByKeys (t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0 -- 迭代器变量
local iter = function () -- 迭代器函数
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
然后你可以遍历有序的结构
local t = { b=1, a=2, z=55, c=0, qa=53, x=8, d=7 }
for key,value in pairsByKeys(t) do
print(" " .. tostring(key) .. "=" .. tostring(value))
end
2021-11-24 13:21:48
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
Lua 的表没有顺序的概念:它们只是一组键值对的集合。
下面的两个表中包含完全相同的键值对,因此它们包含的内容完全相同:
t = { [223] = "asd" ,[23] = "fgh",[543]="hjk",[7]="qwe"} t = {[7]="qwe",[23] = "fgh",[223] = "asd" ,[543]="hjk"}