2017-02-09 3 views
1

Привет, я новичок в Lua, я просто хочу знать, есть ли способ получить ключ и значение таблицы , не используя пары, ipairs, следующие или итераторы? заранее спасибо.!Перемещение таблицы без использования пар в Lua

+0

на самом деле это мое назначение, создающее код Морзе. Использование пар это можно сделать легко. но наш учитель сказал, что если мы попытаемся не использовать пары или итераторы, он даст нам лучшие оценки. я уже застрял целый день, пытаясь не использовать итераторы, но я до сих пор не нашел способ ... –

+0

Примитивная функция для прохождения таблиц - 'next'. Без него или 'пар' (который использует' next'), нет другого пути. – lhf

+0

да, поэтому im soo запутался в том, как перемещаться по таблице без использования функции, построенной lua ... спасибо за ответ –

ответ

2

Я не считаю, что это возможно, поскольку вы сформулировали свой вопрос таким образом, что подразумевается, что ключ неизвестен. Единственный способ проверить определенное значение и соответствующий ему ключ - это перебрать всю таблицу.

Однако, возможно, я неправильно понял, и вы хотите получить определенное значение от ключа без повторения всей таблицы.

Скажем, у вас есть таблица с именем Морзе следующим образом:

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

Если вы хотите, чтобы преобразовать один символ Морзе можно сделать следующим образом:

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

Вы можете сделать наоборот, и определите таблицу со всеми значениями морзе и их соответствующими буквами, как показано ниже. Обратите внимание на использование квадратных скобок, чтобы «избежать» символов.

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

извините. я забыл сказать, что мне нужно создать код Морзе, который может преобразовать английский язык в morse или morse на английский. спасибо, сэр за ответ, я попытался использовать этот подход, используя пары, я могу получить как ключ, так и значение, вот почему я продолжаю думать, как я могу получить ключ, подобный 'morse = {[".-"] = "a"}' morse = ["a"] вернет "a" вместо ".-" –

0

на основе your comment, я думаю, что вы ищете подстановки строк с помощью таблицы отображения. Я думаю, что вы можете использовать string.gsub here (если ваш учитель по-прежнему настаивает на том, что .gsub итератор, вы можете попросить их вежливо, что вы не знаете о методе они утверждают, и был бы рад на самом деле узнать о том же):

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

print(str:gsub("%a", morse)) 
Смежные вопросы