我想在字符串中获得最常见的k大小的子字符串。为此,我使用表来存储每个子字符串的出现次数。这是代码:
function frequentWords(seq, k)
local subs = ""
local counter = {}
for i = 1,(seq:len()-k+1) do
subs = seq:sub(i, i+k-1)
counter[subs] = (counter[subs] and counter[subs] + 1 or 1)
--print(subs .. ": " .. counter[subs])
end
end
counter[subs] = (counter[subs] and counter[subs] + 1 or 1)
行的平均值为counter[subs] = (counter[subs] ? counter[subs]+1 : 1)
。如果我们可以使用counter[subs] = counter[subs] + 1
设置每个新的counter
元素,则此行仅为0
。 Lua有可能这样吗?如果不是,那么做类似事情的最佳方式是什么?
例如,在Ruby中,这是通过声明这样的哈希来完成的:
counter = Hash.new(0)
答案 0 :(得分:7)
您可以在__index
中设置counter
metamethod以返回0:
setmetatable(counter,{__index=function () return 0 end})
但这更容易,更清晰:
counter[subs] = (counter[subs] or 0) + 1
答案 1 :(得分:0)
对于您的情况,lhf的解决方案就足够了。为了完整起见,我想提一下更复杂的方法,它可以实现一些稍微复杂的功能。具体来说,当你将它与可变值一起使用时,它就像你期望的那样行事,例如table:它既创建了项目,又在创建时将它分配给密钥。
function defaultTable(constructor)
local new = {}
local function initIndex(key)
local value = constructor()
new[key] = value
return value
end
setmetatable(new, {__index=initIndex})
return new
end