计算Lua表中值的出现次数

时间:2016-03-03 13:52:07

标签: lua count lua-table

基本上我想做的是转换这种格式的表

result={{id="abcd",dmg=1},{id="abcd",dmg=1},{id="abcd",dmg=1}}

到这种格式的表:

result={{id="abcd",dmg=1, qty=3}}

所以我需要知道表中{id="abcd",dmg=1}出现了多少次。有没有人比嵌套的for循环知道更好的方法?

2 个答案:

答案 0 :(得分:4)

result={{id="abcd",dmg=1},{id="defg",dmg=2},{id="abcd",dmg=1},{id="abcd",dmg=1}}

local t, old_result = {}, result
result = {} 
for _, v in ipairs(old_result) do
  local h = v.id..'\0'..v.dmg
  v = t[h] or table.insert(result, v) or v
  t[h], v.qty = v, (v.qty or 0) + 1
end

-- result: {{id="abcd",dmg=1,qty=3},{id="defg",dmg=2,qty=1}}

答案 1 :(得分:0)

所以你想要清除重复的内容,虽然更好的解决方案是不要让欺骗内容进入,在这里你去:

function Originals(parent)
    local originals = {}
    for i,object in ipairs(parent) do
        for ii,orig in ipairs(originals) do
            local dupe = true
            for key, val in pairs(object) do
                if val ~= orig[key] then
                    dupe = false
                    break
                end
            end
            if not dupe then
                originals[#originals+1] = object
        end
    end
    return originals
end

我试图让代码自我解释,但一般的想法是它循环并将所有带有新内容的对象放在一边,并在之后返回。

警告:代码未经测试