如何限制Lua表仅存储最多10个用户并避免重复用户名?
嘿,帮你搞定分数表的两个核心问题:去重和长度限制
你遇到的这两个问题其实都是Lua数组操作里的常见小坑,咱们一步步来解决:
1. 为啥table.HasValue查不到用户名?怎么正确去重?
你一开始用table.HasValue(scoretbl, name)没效果,是因为你的scoretbl里存的是**{用户名, 分数}的子表**,不是单独的用户名字符串!table.HasValue只会匹配完全一模一样的元素,自然找不到对应的用户名。
你后来写的循环遍历方法是完全正确的,我帮你稍微优化得更易读一点:
local function AddToTable(name, score) -- 遍历整个分数表,挨个检查用户名 for _, userInfo in ipairs(scoretbl) do if userInfo[1] == name then print("兄弟," .. name .. "已经在表里啦,别重复加啦!") return false -- 返回false告诉调用者添加失败 end end -- 没问题就把新用户加进去 table.insert(scoretbl, {name, score}) -- 加完立刻维护列表长度,确保最多10个 keepOnlyTopNUsers(10) return true -- 添加成功返回true end
2. 怎么让列表最多保留10个用户?
最好的方式是每次加完新用户就立刻处理长度,而不是等到显示的时候才删。我写个小函数专门干这个:
local function keepOnlyTopNUsers(maxNum) -- 先按分数从高到低排好序,这样删的都是分数最低的 table.sort(scoretbl, function(a, b) return a[2] > b[2] end) -- 如果超过上限,就循环删最后一个,直到符合要求 while #scoretbl > maxNum do table.remove(scoretbl) -- 默认删最后一个元素,省事 end end
整合后的完整代码
把这些逻辑拼起来,加上你的测试代码,完整版本如下:
local scoretbl = {} local num = 0 -- 先初始化10个测试用户 for i = 1, 10 do table.insert(scoretbl, {'Name '..i, 100 + num}) num = num + 100 end -- 维护列表最大长度的工具函数 local function keepOnlyTopNUsers(maxNum) table.sort(scoretbl, function(a, b) return a[2] > b[2] end) while #scoretbl > maxNum do table.remove(scoretbl) end end -- 带去重检查的添加函数 local function AddToTable(name, score) for _, userInfo in ipairs(scoretbl) do if userInfo[1] == name then print("提示:用户名" .. name .. "已存在,无法重复添加") return false end end table.insert(scoretbl, {name, score}) keepOnlyTopNUsers(10) return true end -- 测试一波 AddToTable('User 55', 5454) -- 成功添加,之后列表会被截断到10个 AddToTable('User 55', 5454) -- 会提示重复,不会添加 AddToTable('User 32', 5454) -- 添加后再次排序截断,留分数最高的10个 -- 显示结果的函数 local function ShowOnly10() print("\n当前排行榜(最多10人,按分数降序):") for k, userInfo in ipairs(scoretbl) do print(k .. ". " .. userInfo[1] .. " | 分数:" .. userInfo[2]) end end ShowOnly10()
几个小细节提醒
- 用
ipairs遍历数组:因为scoretbl是顺序排列的数组,ipairs比pairs遍历更高效,顺序也更稳定。 - 添加后立刻维护长度:这样不管什么时候看
scoretbl,它的长度都不会超过10,不用每次显示都处理一遍。 - 排序逻辑:按分数降序排,移除的是分数最低的用户,完全符合排行榜的需求。
内容的提问来源于stack exchange,提问作者Gigabait
相关产品推荐
相关产品推荐

