路亚 |计算表中每个项目的出现次数

问题描述

嗨,我正在尝试将此 python 代码转换为 Lua

names=['Deepak','Reema','John','Deepak','Munna','Amit','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)

如果有人能帮助我理解这种转换,那就太好了

解决方法

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

x 是当前在该循环循环中编入索引的名称

d 是一个字典,用于存储每个名字的计数

c 是一个包含单个条目的字典,cx 的计数 names

所以这行基本上说:

如果当前名称 x 还没有被计数(不在我们的字典中),将其计数 c 添加到 d 使用 x 中的名称作为键.

此代码效率不高,因为它每次都计算名称,即使该名称已被计算在内。应该更改顺序,以便仅在 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','Amit','Reema'}
local counts = {}    
for _,v in ipairs(names) do
  counts[v] = counts[v] and counts[v] + 1 or 1
end