如何检查哈希中是不是存在特定键?

Posted

技术标签:

【中文标题】如何检查哈希中是不是存在特定键?【英文标题】:How to check if a specific key is present in a hash or not?如何检查哈希中是否存在特定键? 【发布时间】:2011-05-30 12:49:48 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

session.key?("user")

【讨论】:

nice: "string" 访问器也适用于 JSON.parse 解析对象 :) 这对我不起作用,而是使用 :user 方法【参考方案2】:

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

hash.key?(some_key)

【讨论】:

很好地引用了该更改请求和 Matz 的后续响应。 有人确定吗?【参考方案3】:

Hash 实例有一个key? 方法:

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

请务必根据哈希值使用符号键或字符串键:

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

【讨论】:

显然早在 Ruby 1.6 就存在:ruby-doc.com/docs/ProgrammingRuby/html/…(可能更早,不知道在哪里查看文档)【参考方案4】:

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

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"] 都将指向同一条记录

【讨论】:

如果你使用的是Rails,你可以使用Hash#with_indifferent_access来避免这种情况; :my_key"my_key" 都将指向同一条记录 这是最好的答案,尤其是当您正在寻找来自变量的键时,例如 my_hash.has_key? my_key.to_sym :)【参考方案5】:

这里有另一种方式

hash = one: 1, two: 2

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

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

【讨论】:

【参考方案6】:

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

如果不是,它将返回您false

hash =   one: 1, two:2 

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

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

【讨论】:

【参考方案7】:

在 Rails 5 中,has_key? 方法检查 key 是否存在于散列中。使用它的语法是:

YourHash.has_key? :yourkey

【讨论】:

【参考方案8】:

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

irb(main):001:0> hash = "pot" => 1, "tot" => 2, "not" => 3
=> "pot"=>1, "tot"=>2, "not"=>3
irb(main):002:0> key = "not"
=> "not"
irb(main):003:0> hash.keys.include?(key)
=> true

【讨论】:

hash.has_key?(:key) 听起来好多了

以上是关于如何检查哈希中是不是存在特定键?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Perl 的哈希中是不是存在密钥? [复制]

在检索值之前检查哈希映射键是不是存在[重复]

如何检查密钥是不是存在于深层 Perl 哈希中?

Ruby Style:如何检查嵌套的哈希元素是不是存在

Ruby Style:如何检查嵌套的哈希元素是不是存在

如何知道映射表中是不是存在特定值?