ルアは値から鍵を見つける

私はこれで働いています:

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

   nchar = (chars[$name])+1

変数$ nameは私にログインしている文字列を与えます。この場合、 "Nigo Astran" "Nigo Astran" の場合は nchar の値は "2" です。私はあなたがそのアイデアを得ると信じている。

今、値からキーを取得したい、例:

nchar2 のときは、キーとして "pantera" 私はちょうどキーの価値を得ていません。

5

3 答え

テーブルの値からキーを取得する必要がある場合は、次のようにテーブルを反転することを検討してください。

function table_invert(t)
   local s={}
   for k,v in pairs(t) do
     s[v]=k
   end
   return s
end
10
追加された
@ヘマン、固定、ありがとう。
追加された 著者 lhf,
forループにdoがありません。
追加された 著者 Brandon,
追加された 著者 Wesker,

私は、 pairs を使ってテーブル内のエントリをループしてキーを比較するよりも、何かもっと効率的だと思っていません。

あなたはこのようなものを使ってそれを行うことができます

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
追加された
それは私の問題であったxD(chars、nchar)はなぜですか?
追加された 著者 Wesker,
それを得た私はtostring()あなたとにかくあなたを愛して<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
追加された