如何检查特定密钥是否存在于散列中?

我想检查会话哈希中是否存在“用户”键。我该怎么做?

请注意,我不想检查键的值是否为nil。我只想检查“用户”关键是否存在。

550459 次浏览

Hashkey?方法告诉您给定的密钥是否存在。

session.key?("user")

虽然Hash#has_key?完成了工作,但正如Matz所指出的这里,它已被弃用以支持Hash#key?

hash.key?(some_key)

它很晚,但最好使用符号作为关键:

my_hash = {}
my_hash[:my_key] = 'value'


my_hash.has_key?("my_key")
=> false
my_hash.has_key?("my_key".to_sym)
=> true


my_hash2 = {}
my_hash2['my_key'] = 'value'


my_hash2.has_key?("my_key")
=> true
my_hash2.has_key?("my_key".to_sym)
=> false

但是在创建哈希时,如果您将字符串作为键传递,那么它将在键中搜索字符串。

但是在创建哈希时,您将符号传递为键,然后has_key?将使用符号搜索键。


如果您使用的是Rails,您可以使用Hash#with_indifferent_access来避免这种情况;hash[:my_key]hash["my_key"]都将指向相同的记录

哈希实例有一个key?方法:

{a: 1}.key?(:a)
=> true

请务必使用符号键或字符串键,具体取决于您在哈希中的内容:

{'a' => 2}.key?(:a)
=> false

您始终可以使用Hash#key?来检查密钥是否存在于哈希中。

如果没有,它会返回你false

hash =  { one: 1, two:2 }


hash.key?(:one)
#=> true


hash.key?(:four)
#=> false

另一条路在这里

hash = {one: 1, two: 2}


hash.member?(:one)
#=> true


hash.member?(:five)
#=> false

在Rails 5中,has_key?方法检查哈希中是否存在键。使用它的语法是:

YourHash.has_key? :yourkey