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

时间:2014-03-26 01:07:05

标签: 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"],
   ...
}>

我尝试了以下操作,但失败了。

(1)

e = entry.to_hash
e.has_key? "uid" 

(2)

entry.has_key? "uid" 

第一个错误说&#34; to_hash&#34; undefined,第二个&#34; has_key&#34;未定义。然后我真的不知道该怎么做,基本上我想找到&#34; uid&#34;存在,如果是,得到其对应的价值。

非常感谢您的提示。

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

def get_value(key)
  if entry has key 
    return key's value
  end
end

2 个答案:

答案 0 :(得分:26)

:uidSymbol。这不是String

试试这个:

e.has_key? :uid

答案 1 :(得分:4)

关键&#34; uid&#34;不存在。尝试

e = Entry.new.myhash
e.has_key?(:uid)

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

attr_reader :myhash

在initialize方法之前。