推送字典?如何在Lua中实现?
2013-12-26 1:6:48
收藏:0
阅读:122
评论:2
假设我有这个 Lua 字典
places = {dest1 = 10, dest2 = 20, dest3 = 30}
在我的程序中,我会检查字典是否达到了我设定的大小限制(即3个元素),如果达到了该如何将最早的键/值对从字典中删除并添加一个新的键/值对?
places["newdest"] = 50
-- places 现在应该是这样的,dest3 被删除了,新的 newdest 添加了进去,字典大小没有改变
places = {newdest = 50, dest1 = 10, dest2 = 20}
点赞
用户828255
如果你真的需要这样做,并且这也很容易重复使用。
local function ld_next(t, i) -- 这是一个按顺序排列的迭代器,从旧到新。
if i <= #t then
return i + 1, t[i], t[t[i]]
end
end
local limited_dict = {
__newindex = function(t, k, v)
if #t == t[0] then -- 弹出最后一个条目。
t[table.remove(t, 1)] = nil
end
table.insert(t, k)
rawset(t, k, v)
end,
__pairs = function(t)
return ld_next, t, 1
end
}
local t = setmetatable({ [0] = 3 }, limited_dict)
t['dest1'] = 10
t['dest2'] = 20
t['dest3'] = 30
t['dest4'] = 50
for i, k, v in pairs(t) do
print(k, v)
end
dest2 20
dest3 30
dest4 50
表中唯一密钥的数量(限制)存储在数字索引中,其中0个索引表示表可以拥有的唯一密钥的限制。
2013-12-26 00:57:06
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
考虑到字典键不会保存其输入的位置,我编写了一些内容,希望能帮助您实现所需的功能。
function push_old(t, k, v) local z = fifo[1] t[z] = nil t[k] = v table.insert(fifo, k) table.remove(fifo, 1) end您需要首先创建
fifo表,然后根据输入键的顺序创建它(例如,fifo = {"dest3", "dest2", "dest1"},基于您的帖子,从最先输入到最后输入),然后使用:push_old(places, "newdest", 50)这个函数就可以完成工作了。祝你节日快乐!