【问题标题】:Count frequency of elements into an array in Lua在Lua中计算元素的频率到数组中
【发布时间】:2013-11-27 09:14:10
【问题描述】:

我在 Lua 中有一张桌子:

p = {'sachin'、'sachin'、'dravid'、'Dhoni'、'yuvraj'、'kohli'}

我想计算表中每个名称的频率。

test1 = {sachin=2, dravid=1, Dhoni=1, yuvraj=1, kohli=1}

我用很多 for 循环尝试了这个程序。请看我的代码

> 函数 exec(ele,p) 计数 = 0 对于 k,v 成对 (p) 做 如果 ele == p[k] 那么 计数 = 计数 +1 结尾 结尾 返回计数 结尾 > 新表 = {} > 对于 k,v 成对 (p) 做 新表[v] = exec(v,p) 结尾 > > 对于 k,v 成对 (new_table) 做 打印(k,v) 结尾 多哈 1 尤拉杰 1 科利 1 萨钦 2 德拉维德 1

我想以更有效的方式做到这一点。我怎样才能做到这一点?

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    你可以这样计算频率:

    function tally(t)
      local freq = {}
      for _, v in ipairs(t) do
        freq[v] = (freq[v] or 0) + 1
      end
      return freq
    end
    

    这是另一个demo example。

    【讨论】:

      【解决方案2】:

      对于这种简单的情况,使用 metatable 可能有点不必要,只是显示另一个选项:

      local mt = {__index = function() return 0 end}
      local newtable = {}
      setmetatable(newtable, mt)
      
      for _, v in pairs(p) do
          newtable[v] = newtable[v] + 1
      end
      

      上面的元方法__index 将表0 作为默认值。

      【讨论】:

      • @ms2008vip 嗯,是的,我用t这个名字测试过,但是当我发到这里时,我注意到OP使用了newtable这个名字,所以我相应地改变了它,显然我错过了一个。已修复,谢谢。
      猜你喜欢
      • 2015-02-05
      • 2021-07-28
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2017-09-14
      • 2014-03-01
      相关资源
      最近更新 更多