如何检查散列中是否存在特定键?

时间:2010-12-24 22:02:14

标签: ruby-on-rails ruby data-structures associative-array

我想检查会话哈希中是否存在“用户”密钥。我怎么能这样做?

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

8 个答案:

答案 0 :(得分:848)

Hash的{​​{1}}方法会告诉您是否存在给定的密钥。

key?

答案 1 :(得分:271)

虽然Hash#has_key?完成了工作,但正如Matz所说here,它已被弃用,而不是Hash#key?

hash.key?(some_key)

答案 2 :(得分:35)

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

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

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

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

答案 3 :(得分:27)

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

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"]都会指向相同的记录

答案 4 :(得分:4)

您始终可以使用Func("Hello World"); 检查密钥是否存在于哈希中。

如果不是,它会返回Hash#key?

false

答案 5 :(得分:2)

另一种方式在这里

hash = {one: 1, two: 2}

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

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

答案 6 :(得分:1)

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

YourHash.has_key? :yourkey

答案 7 :(得分:0)

您可以使用 hash.keys.include?(key)

.env