如何检查哈希中是不是存在特定键?
Posted
技术标签:
【中文标题】如何检查哈希中是不是存在特定键?【英文标题】:How to check if a specific key is present in a hash or not?如何检查哈希中是否存在特定键? 【发布时间】:2011-05-30 12:49:48 【问题描述】:我想检查会话哈希中是否存在“用户”键。我该怎么做?
请注意,我不想检查键的值是否为零。我只想检查“用户” key 是否存在。
【问题讨论】:
【参考方案1】:Hash
的key?
方法告诉您给定的键是否存在。
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) 听起来好多了以上是关于如何检查哈希中是不是存在特定键?的主要内容,如果未能解决你的问题,请参考以下文章