Wesker
Wesker

Reputation: 259

Lua find a key from a value

I'm working with this:

chars = {
    ["Nigo Astran"] = "1",
    ["pantera"] = "2"
}
    
nchar = chars[$name] + 1

The variable $name will give me a string that I'm logged in to, in this case: "Nigo Astran" and nchar has the value "2" if I'm in "Nigo Astran", and so on. I believe you get the idea.

Now, I want to get the key from the value, for example:

when nchar is "2" it should give me "pantera" as the key. I'm just not getting the value of the key.

Upvotes: 8

Views: 25864

Answers (3)

Michael Anderson
Michael Anderson

Reputation: 73470

I don't think there is anything more efficient than looping over the entries in the table using pairs and comparing the keys.

you can do that using something like this

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

Then you'd use it like this:

local k = get_key_for_value( chars, "1" )

Upvotes: 5

Master
Master

Reputation: 19

the best way to do that is like this

 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

Upvotes: 0

lhf
lhf

Reputation: 72312

If you find yourself needing to get the key from the value of a table, consider inverting the table as in

function table_invert(t)
   local s={}
   for k,v in pairs(t) do
     s[v]=k
   end
   return s
end

Upvotes: 12

Related Questions