问题描述
嗨,我正在尝试将此 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
是一个包含单个条目的字典,c
中 x
的计数 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