gpt4 book ai didi

dictionary - 推字典?如何在 Lua 中实现这一点?

转载 作者:行者123 更新时间:2023-12-01 02:20:41 24 4
gpt4 key购买 nike

假设我在 Lua 中有这本词典

places = {dest1 = 10, dest2 = 20, dest3 = 30}

在我的程序中,我检查字典在这种情况下是否满足我的大小限制 3,如何将最旧的键/值对从字典中推出并添加一个新的键/值对?
places["newdest"] = 50

--places should now look like this, dest3 pushed off and newdest added and dictionary has kept its size

places = {newdest = 50, dest1 = 10, dest2 = 20}

最佳答案

如果您真的需要它,这样做并不太难,而且它也很容易重复使用。

local function ld_next(t, i) -- This is an ordered iterator, oldest first.
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 -- Pop the last entry.
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指示表可以具有的唯一键的限制的索引。

关于dictionary - 推字典?如何在 Lua 中实现这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20775392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com