在Lua中,计算数组元素的频率。

我在 Lua 中有一个表格:

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

我想要计算每个名字在表格中的频率。

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

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

> function exec(ele,p)
count = 0
for k,v in pairs(p) do
if ele == p[k] then
count = count +1
end
end
return count
end

> new_table = {}
> for k,v in pairs(p) do
new_table[v] = exec(v,p)
end
>
> for k,v in pairs(new_table) do
print(k,v)
end
dhone   1
yuvraj  1
kohli   1
sachin  2
dravid  1

我想用更高效的方法来做。我该如何实现?

点赞
用户234175
用户234175

你可以像这样计算频率:

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

以下是另一个 演示示例

2013-11-14 11:45:29
用户1009479
用户1009479

使用元表可能对于这个简单的案例有点不必要,这里只是展示另一个选项:

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

2013-11-14 12:19:33