可能重复:
LZW Compression In Lua
这是我使用LZW压缩方法在Lua中压缩数据的代码。我的问题是该函数返回字符'T',而不是返回完整的压缩字符串'TOBEORNOTTOBEORNOT'。谢谢!
function compress(uncompressed)
local dict_size = 256
local dictionary = {}
w = ""
result = {}
for i = 1, #uncompressed do
local c = string.sub(uncompressed, i, i)
local wc = w .. c
if dictionary[wc] == true then
w = wc
else
dictionary[w] = ""
dictionary[wc] = dict_size
dict_size = dict_size + 1
w = c
end
if w then
dictionary[w] = ""
end
return w
end
end
compressed = compress('TOBEORNOTTOBEORTOBEORNOT')
print(compressed)
答案 0 :(得分:1)
只是一个提示:你在for循环中return w
编辑一些解释
如果在循环中返回结果,则循环将只进行一次迭代。在第一次迭代结束时,您的函数将完成。这是没有意义的。所以你的return语句应该在for循环之后。
此外,您怀疑是否声明了变量result = {}
,然后您永远不会使用它。
所以我建议你在循环之后放置你的return语句,并在每次迭代结束时打印变量的值(你将print语句放在你现在有return
的位置),所以你可以看到真正发生的事情。