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

Lua如何从table中分离重复、非重复键值对至对应新表

Lua表按值重复度拆分实现方案

首先先指出你给出的原始代码的两个问题:

  • 语法错误:Lua表构造规则中,带引号的字符串作为键时,必须放在方括号内,正确写法是['item1'] = 6,直接写'item1' = 6无法运行
  • 结构限制:普通Lua键值表不允许存在重复键,你写了两次item5键,即使修正语法,后写入的item5 = 3会覆盖之前的item5 = 2,最终表中只会保留一个item5字段,无法匹配你给出的预期输出。如果你的业务场景确实需要同一个键对应多个值,需要用数组嵌套结构存储键值对,下面会给出两种场景的实现代码。

场景1:普通唯一键值表(无重复键)

这是最常用的Lua表场景,所有键唯一,仅按值的出现次数拆分:值出现≥2次的键值对存入repeated,值仅出现1次的存入notrepeated。

实现代码

-- 正确写法的示例原始表,替换成你的实际业务数据即可
local tbl = {
    item1 = 6,
    item2 = 1,
    item3 = 6,
    item4 = 3,
    item5 = 2,
    item6 = 3 -- 原代码重复写了item5,这里修正为唯一键,可自行替换
}

local repeated = {}
local notrepeated = {}
local valueCount = {}

-- 第一次遍历:统计每个值的出现频次
for _, v in pairs(tbl) do
    valueCount[v] = (valueCount[v] or 0) + 1
end

-- 第二次遍历:按频次拆分到对应结果表
for k, v in pairs(tbl) do
    if valueCount[v] > 1 then
        repeated[k] = v
    else
        notrepeated[k] = v
    end
end

运行结果

  • repeated内容:{item1 = 6, item3 = 6, item4 = 3, item6 = 3},符合重复值存储要求
  • notrepeated内容:{item2 = 1, item5 = 2},和你给出的非重复值预期完全一致

场景2:允许重复键的多映射结构

如果你确实需要存储重复键(比如示例中同一个item5对应2和3两个值),需要把原始数据改成数组嵌套的键值对结构,对应实现代码如下:

-- 多映射结构的原始表,允许重复键
local tbl = {
    {key = 'item1', value = 6},
    {key = 'item2', value = 1},
    {key = 'item3', value = 6},
    {key = 'item4', value = 3},
    {key = 'item5', value = 2},
    {key = 'item5', value = 3}
}

local repeated = {}
local notrepeated = {}
local valueCount = {}

-- 统计值频次
for _, entry in ipairs(tbl) do
    local v = entry.value
    valueCount[v] = (valueCount[v] or 0) + 1
end

-- 拆分结果
for _, entry in ipairs(tbl) do
    local k, v = entry.key, entry.value
    if valueCount[v] > 1 then
        repeated[k] = v
    else
        notrepeated[k] = v
    end
end

运行结果

  • repeated内容:{item1 = 6, item3 = 6, item4 = 3, item5 = 3},和你给出的预期完全一致
  • notrepeated内容:{item2 = 1, item5 = 2},和你给出的预期完全一致

注意:由于Lua普通表的键唯一,这种场景下如果同一个键对应的值一个是重复值、一个是非重复值,最终结果表里该键会保留最后一次遍历到的值,和你给出的预期效果匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:30:16