【问题标题】:Lua find a key from a valueLua 从一个值中找到一个键
【发布时间】:2011-12-17 00:39:27
【问题描述】:

我正在处理这个:

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

变量$name 会给我一个我已登录的字符串,在本例中为:"Nigo Astran" 如果我在"Nigo Astran" 中,则nchar 的值为"2",依此类推。我相信你明白了。

现在,我想从值中获取key,例如:

nchar"2" 它应该给我"pantera" 作为键。我只是没有得到密钥的值。

【问题讨论】:

    标签: lua


    【解决方案1】:

    我认为没有什么比使用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" )
    

    【讨论】:

    • 好吧,但遗憾的是,我不能像
       nchar = (chars[$name])+1  get_key_for_value(chars, nchar) 那样将是 nil idk 为什么,那是我的一开始就有问题xD
    • 知道了,我用 tostring() 做到了,反正我爱你
    【解决方案2】:

    如果您发现自己需要从表的值中获取键,请考虑将表反转

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

    【讨论】:

    • 好吧,我正在使用此代码函数 get_key_for_value(t, value) for k,v in pairs(t) do if v==value then return k end return nil end 现在我发现另一个问题,当我的表结束,并返回一个我想要的 nil,从第一个值循环,还不能这样做
    • for 循环缺少一个 do。
    • 我建议使用ipairs 而不是pairs,因为它保留了原始表格的顺序。
    【解决方案3】:

    最好的方法是这样

     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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      相关资源
      最近更新 更多