Lua знайде ключ із значення

Я працюю з цим:

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

   nchar = (chars[$name])+1

Змінна $ name дасть мені рядок, на який я ввійшов, в даному випадку: "Nigo Astran" і nchar має значення "2" , якщо я в "Nigo Astran" , і так далі. Я вірю, що ви отримаєте ідею.

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

коли nchar 2 , він повинен дати мені "pantera" як ключ. Я просто не отримую значення ключа.

5

3 Відповіді

Якщо вам знадобиться отримати ключ із значення таблиці, розглянути інвертування таблиці як у

function table_invert(t)
   local s={}
   for k,v in pairs(t) do
     s[v]=k
   end
   return s
end
10
додано
@HeMan, виправлено, спасибі.
додано Автор lhf, джерело
Цикл for відсутній.
додано Автор Brandon, джерело
ну atm im використовуючи цю функцію коду get_key_for_value (t, значення) для k, v парами (t) робити, якщо v == значення, то повернути k кінця повернення нульового кінця тепер їм знайти іншу проблему, коли мій стіл закінчується і повертає Я хочу, щоб цикл з першого значення, нахиляє зробити, що ще <, <
додано Автор Wesker, джерело

Я не думаю, що Theres нічого більш ефективного, ніж цикл над записами в таблиці, використовуючи пари і порівнюючи ключі.

Ви можете зробити це, використовуючи щось подібне

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

Тоді ви можете використовувати його так:

local k = get_key_for_value( chars, "1" )
3
додано
добре, що працює, але, на жаль, я не можу зробити, як
 nchar = (символи [$ ім'я]) + 1  get_key_for_value (символи, nchar) буде нуль IDK чому, це була моя проблема на початку XD
додано Автор Wesker, джерело
отримав це я зробив це з tostring() люблю вас anyways <3
додано Автор Wesker, джерело

це найкращий спосіб зробити це

 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
1
додано