Lua:将表中的每个新元素设置为默认值

Fáb*_*rez 7 hash lua lua-table

我想在字符串中获得最常见的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
Run Code Online (Sandbox Code Playgroud)

该线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中,这是通过像这样声明一个Hash来完成的:

counter = Hash.new(0)
Run Code Online (Sandbox Code Playgroud)

lhf*_*lhf 7

您可以设置__indexmetamethod counter以返回0:

setmetatable(counter,{__index=function () return 0 end})
Run Code Online (Sandbox Code Playgroud)

但这更容易,更清晰:

counter[subs] = (counter[subs] or 0) + 1
Run Code Online (Sandbox Code Playgroud)