我想检查“user”键是否存在于会话散列中。我该怎么做呢?

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


当前回答

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

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作为key,那么它会在key中搜索字符串。

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


如果你正在使用Rails,你可以使用hash# with_indifferent_access来避免这种情况;hash[:my_key]和hash["my_key"]都指向同一个记录

其他回答

哈希的钥匙吗?方法告诉您给定的键是否存在。

session.key?("user")

而散列# 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 

但在创建哈希时,如果你传递string作为key,那么它会在key中搜索字符串。

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


如果你正在使用Rails,你可以使用hash# with_indifferent_access来避免这种情况;hash[:my_key]和hash["my_key"]都指向同一个记录

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

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

请确保使用符号键或字符串键,这取决于你的散列中有什么:

{'a' => 2}.key?(:a)
=> false
h = {}
if h.respond_to?(:key?) && h.key?('text') #with respond_to method check if it's hash
   puts h['text'] 
end