我想检查会话哈希中是否存在“用户”键。我怎样才能做到这一点?
请注意,我不想检查键的值是否为nil。我只想检查“用户” 键是否存在。
我想检查会话哈希中是否存在“用户”键。我怎样才能做到这一点?
请注意,我不想检查键的值是否为nil。我只想检查“用户” 键是否存在。
Answers:
Hash
的key?
方法会告诉您是否存在给定的密钥。
session.key?("user")
Hash#has_key?
正如Matz 在此处指出的那样,虽然完成了工作,但已不赞成使用Hash#key?
。
hash.key?(some_key)
在最新的Ruby版本中,Hash实例具有一种key?
方法:
{a: 1}.key?(:a)
=> true
确保根据您的哈希值使用符号键或字符串键:
{'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
但是,当创建散列时,如果您将字符串作为键传递,则它将在键中搜索字符串。
但是,当创建哈希时,您将符号传递为键,然后传递has_key吗?将使用符号搜索键。
如果您使用的是Rails,则Hash#with_indifferent_access
可以避免这种情况。双方hash[:my_key]
并hash["my_key"]
会指向相同的记录
Hash#with_indifferent_access
可以避免这种情况。双方:my_key
并"my_key"
会指向同一个纪录
您始终Hash#key?
可以检查密钥是否存在于哈希中。
如果没有,它将返回您 false
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false