You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua集合实现未按预期工作,求排查去重函数返回空数组问题

Lua集合去重问题排查与解决

你的代码其实已经成功存储了t1中的唯一元素,但你觉得返回空数组是因为Lua表的数组部分与哈希部分的区别:

  • 你用元素值(11、22、33等)作为t的键,这些键属于Lua表的哈希部分,而非连续整数索引(从1开始)的数组部分。
  • ipairs只能遍历表中连续整数键从1开始的数组部分,所以用ipairs遍历返回的t时会看不到元素;但用pairs遍历就能获取到所有唯一元素。

如果你需要返回标准数组形式的唯一元素(即键为1、2、3...的连续整数索引),可以修改代码如下:

local function test() 
 local t1 = {11,11,22,33,33,44,55,66,77,88,99}
 local seen = {} -- 用于标记已出现的元素
 local t = {}
 for i, v in ipairs(t1) do
  if not seen[v] then
    seen[v] = true
    table.insert(t, v) -- 将唯一元素插入数组末尾,保证连续索引
  end
 end
 return t
end

说明

  • seen表作为临时集合,用元素值作为键,标记该元素是否已出现,实现去重逻辑。
  • table.insert会自动给t添加连续的整数索引,这样返回的t就是标准Lua数组,用ipairs遍历就能正常获取所有唯一元素。

如果你只是需要判断元素是否存在(集合的核心需求),你原来的代码是可行的,比如可以通过if t[11] then ... end来判断11是否在集合中,只是它不是数组形式而已。

内容的提问来源于stack exchange,提问作者Shivaji Pote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:54:53