我需要编写一个带有字符串的函数,并在Lua中删除重复的字符。我需要帮助的是......
一个简单的函数/算法将不胜感激!
答案 0 :(得分:4)
如果您只需要每个角色的一个实例,那么您可能不需要跟踪计数;您可以将输入字符串与用于生成输出的同一个表进行比较。
local function contains(tbl, val)
for k,v in pairs(tbl) do
if v == val then return true end
end
return false
end
local function uniq(str)
local out = {}
for s in str:gmatch(".") do
if not contains(out, s) then out[#out+1] = s end
end
return table.concat(out)
end
print( uniq("the quick brown fox jumps over the lazy dog") )
-- the quickbrownfxjmpsvlazydg
对于短字符串,这可能比下面的函数慢,但由于概述here的原因,通常最好避免在Lua中过多的字符串连接。如果你确定输出字符串相当短,你可以摆脱contains()
并使用它:
local function uniq(str)
local out = ""
for s in str:gmatch(".") do
if not out:find(s) then out = out .. s end
end
return out
end