Луа найти ключ от значения - PullRequest
5 голосов
/ 28 октября 2011

Я работаю с этим:

    chars = {
         ["Nigo Astran"]="1",
         ["pantera"]="2"
         }

   nchar = (chars[$name])+1

Переменная $ name даст мне строку, в которую я вошел, в этом случае: "Nigo Astran" и nchar имеет значение "2", если я нахожусь в "Nigo Astran", и так далее. Я верю, что вы поняли идею.

Теперь я хочу получить ключ из значения, например:

когда nchar равно 2, это должно дать мне "pantera" в качестве ключа. Я просто не понимаю значение ключа.

Ответы [ 3 ]

10 голосов
/ 28 октября 2011

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

function table_invert(t)
   local s={}
   for k,v in pairs(t) do
     s[v]=k
   end
   return s
end
3 голосов
/ 28 октября 2011

Не думаю, что есть что-то более эффективное, чем перебирать записи в таблице с помощью pairs и сравнивать ключи.

Вы можете сделать это, используя что-то вроде

function get_key_for_value( t, value )
  for k,v in pairs(t) do
    if v==value then return k end
  end
  return nil
end

Тогда вы бы использовали это так:

local k = get_key_for_value( chars, "1" )
0 голосов
/ 18 декабря 2017

лучший способ сделать это так

 local autoreply={
['hey']='hi',
['how are u']='am fine what about u?',
['how r u']='am fine what about u?',
['how are you']='am fine what about u?',
['sleep']='rockabye bayby good dreems',
['السلام']='وعليكم السلام ورحمة الله وبركاته',
}
local keys={'hey','how are u','how r u','how are you','sleep','السلام'}
function getValueFromKey(table,key)
  for k,v in ipairs(keys)do
  if string.find(string.upper(key),string.upper(v)) then return table[v] end
  end
   return false
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...