如何检查Ruby哈希中是否存在密钥?

use*_*574 11 ruby

我正在使用Net :: LDAP的搜索,返回的条目是这样的.

#<Net::LDAP::Entry:0x7f47a6491c00
 @myhash=
  {:loginshell=>["/bin/bash"],
   :cn=>["M... R..."],
   :homedirectory=>["/mnt/home/m..."],
   :uid=>["m..."],
   :userpassword=>["{CRYPT}$1$3zR/C...$R1"],
   ...
}>
Run Code Online (Sandbox Code Playgroud)

我试着做以下事情,但失败了.

(1)

e = entry.to_hash
e.has_key? "uid" 
Run Code Online (Sandbox Code Playgroud)

(2)

entry.has_key? "uid" 
Run Code Online (Sandbox Code Playgroud)

第一个错误说"to_hash"未定义,第二个"has_key"未定义.然后我真的不知道怎么做,基本上我想找到"uid"是否存在,如果是这样的话得到它的对应值.

非常感谢你的提示.

顺便说一句,它只响应"entry.uid",但如果搜索键是以字符串形式提供的,那该怎么办呢?例如,

def get_value(key)
  if entry has key 
    return key's value
  end
end
Run Code Online (Sandbox Code Playgroud)

sca*_*guy 27

:uid是一个Symbol.那不是String.

试试这个:

e.has_key? :uid
Run Code Online (Sandbox Code Playgroud)

  • `has_key?` - 意识到问号 - 是'Hash`类的任何实例的方法.除非你使用的东西不同于`Hash`实例,否则它不能被定义. (2认同)

Jor*_*anD 6

键“uid”不存在。尝试

e = Entry.new.myhash
e.has_key?(:uid)
Run Code Online (Sandbox Code Playgroud)

那应该返回true。如果这给您带来错误,则问题可能出在您的班级中。确保在 initialize 方法中定义了 myhash,并且您使用 getter 方法(或 attr_reader)能够访问该变量。你可以用

attr_reader :myhash
Run Code Online (Sandbox Code Playgroud)

就在 initialize 方法之前。