如何检查一个特定的密钥是否存在于一个散列或不是?

我想检查会话哈希中是否存在“用户”键。 我怎样才能做到这一点?

请注意,我不想检查密钥的值是否为零。 我只想检查“用户” 是否存在。

Hashkey? 方法告诉你一个给定的键是否存在。

 session.key?("user") 

Hash#has_key? Matz 在这里注意到,已经完成了这项工作,它已经被弃用,而不是Hash#key?

 hash.key?(some_key) 

在最新的Ruby版本中,Hash实例有一个key? 方法:

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

一定要使用符号键或string键,具体取决于你在哈希中有什么:

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

现在已经很晚了,但最好使用符号作为关键:

 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 

但是,如果您将string作为密钥传递,则创build散列时,将search键中的string。

但是,当创build哈希你传递符号作为关键然后has_key? 将通过使用符号来search密钥。


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

你总是可以使用Hash#key? 检查密钥是否存在于散列中。

如果没有,它会返回你false

 hash = { one: 1, two:2 } hash.key?(:one) #=> true hash.key?(:four) #=> false