2017-02-09 66 views
1

你好我是一个新手在Lua我只是想知道是否有一种方法来获取表的关键和价值不使用对,ipairs,下一个或其他迭代器?提前致谢。!导航表中不使用对在Lua

+0

其实我的任务创建一个莫尔斯电码。使用它可以很容易地完成。但我们的老师说如果我们不尝试使用成对或迭代器,他会给我们更好的成绩。我已经停留了整天寻找一种不使用迭代器的方法,但我仍然没有找到方法... –

+0

遍历表的原始函数是'next'。如果没有它,或者“双”(使用“下一个”),就没有其他办法。 – lhf

+0

是的,这就是为什么即时通讯如此困惑如何遍历表,而不使用lua构建的函数......感谢回复 –

回答

2

我不相信这是可能的,因为你用这样的方式表达了你的问题,这意味着密钥是未知的。检查某个值及其相应键的唯一方法是遍历整个表。

但是,也许我误解了,你想从一个键获得一定的价值,而无需遍历整个表。

假设你有一个莫尔斯命名表如下:

morse = { a = ".-"; b = "-..."; } -- And so on 

如果你想为一个字符莫尔斯你可以做如下转换:

morse["a"] --Which will return the string ".-" 

你可以做相反,并用下面的所有莫尔斯值和它们相应的字母来定义一个表格。请注意使用方括号来“转义”字符。

morse = { [".-"] = "a"; ["-..."] = "b" } 
morse[".-"] -- This will return "a" 
+0

对不起。我忘了说我必须创建一个可以将英文转换为莫尔斯或莫尔斯转换为英文的莫尔斯电码。感谢先生的答复,我尝试使用这种方法使用对我可以同时获得关键和价值,这就是为什么我一直在想我怎么能得到像'莫尔斯= {[“.-”] =“a”}莫尔斯键= [“a”]会返回“a”而不是“.-” –

0

基于your comment,我认为你正在寻找使用映射表中的字符串替换。我想你可以使用string.gsub here(如果你的老师仍然坚持.gsub是一个迭代器,你可以问他们礼貌,你是不知道,他们声称该方法的人员将乐于实际了解同):

local str = "sos sos sos" 
local morse = {s = "...", o = "---"} 

print(str:gsub("%a", morse))