【问题标题】:Count values in a list计算列表中的值
【发布时间】:2017-10-15 03:38:44
【问题描述】:

我被 LUA 中的列表困住了。我有一个包含重复项的列表,看起来像这样:

list = {"item1","item1",item2","item3","item3"} 等 此列表由以下代码填充:

logtable={} if #(activity)>0 then for i,log in pairs(activiteit) do table.insert(logtable, log.createdby) end end

activity 是我数据库中的一个链接实体。我可以通过我们的后端接口访问它。 log.createdby 是一个数据库字段,也可以通过后端接口使用。我检查了 log.createdby 的结果类型,这是一个字符串。因此,输入列表是根据可用数据动态创建的。

我需要在此列表中找到唯一值并计算唯一值的出现次数。我找不到一个简单的方法来做到这一点。有关如何在 Lua 中执行此操作的任何提示或提示?

谢谢!

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    将值设置为键并计数:

    local activiteit = { 
        {createdby = "item1", field2="",}, 
        {createdby = "item2", field2="",}, 
        {createdby = "item2", field2="",},
        {createdby = "item3", field2="",},
        {createdby = "item3", field2="",},
    } 
    
    local logtable = {}
    for _,log in pairs(activiteit) do
        local index = log.createdby 
        logtable[index] = (logtable[index] or 0) + 1
    end
    
    for  k,v in pairs(logtable) do
         print(k,v)
    end
    

    控制台:

    item2   2
    item3   2
    item1   1
    

    【讨论】:

    • 谢谢,如果我有一个预定义的列表,这将有效。如果我直接从数据库中获取数据,它就不起作用:code Res = {} for _,v in pairs(activiteit) do Res[v.activiteit] = (Res[v.activiteit] or 0) + 1 end 当我第一次通过循环访问数据库并使用 table.insert 创建列表时,它什么也不返回。我在这里俯瞰什么?当我输出数据库字段的类型时,它会返回一个字符串。
    • 抱歉我的代码写的有点错误 Res = {} for _,v in pairs(activiteit) do Res[v.name] = (Res[v.name] or 0) + 1 end
    • 如果您更正问题中的输入列表,我将更正答案。不清楚你不能
    • 我在原来的问题中添加了额外的信息,希望这能让事情更清楚
    • 我更正了我对表格有嵌套表格的情况的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多