Lua | 统计表中每个元素出现的次数

嗨,我正在尝试将这段 Python 代码转换为 Lua

names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
d={}
for i in range(len(names)-1):
    x=names[i]
    c=0
    for j in range(i,len(names)):
        if names[j]==names[i]:
            c=c+1
    count=dict({x:c})
    if x not in d.keys():
        d.update(count)
print (d)

我已经从头开始完成了所有其他部分,但我想不出如何将此部分转换为 Lua

    if x not in d.keys():
        d.update(count)

如果有人能帮我理解这个转换,那就太棒了。

点赞
用户2858170
用户2858170
如果 x 不在 d 的键中:
    将 x 的数量 c 加入到 d 中

x 表示当前循环到的名字。

d 是一个用来存储每个名字数量的字典。

c 是一个只有一个条目的字典,表示 namesx 的数量。

因此这一行代码的意思是:

如果当前的名字 x 还没有被计数过(不在我们的字典中),那么使用 x 作为键,将它的数量 c 加入到 d 中。

这段代码不是很高效,因为它每次都会统计所有名字的数量,即使某个名字已经被计算过了。这个顺序应该被改变,以便只有在 d 中没有数量时才计数。

而且,对于每个条目来说,无需每次都迭代整个数组,嵌套的循环是没有意义的。你可以一次性地计数。

你不应该从那个资源中学习。

在 Lua 中,上面的代码段应该是这样的:

if not d[x] then d[x] = c end

或者,简单地:

d[x] = d[x] or c

这就是你可以有效地在 Lua 中实现它的方法。

local names = {'Deepak','Reema','John','Deepak','Munna','Reema','Deepak',
  'Amit','John','Reema'}
local counts = {}
for _, v in ipairs(names) do
  counts[v] = counts[v] and counts[v] + 1 or 1
end
2021-07-20 12:59:11