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

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

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

【问题讨论】:

    标签: ruby data-structures associative-array


    【解决方案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
    

    【讨论】:

    【解决方案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) 听起来好多了
          猜你喜欢
          • 2012-02-19
          • 1970-01-01
          • 1970-01-01
          • 2012-04-05
          • 2018-07-02
          • 2011-05-19
          • 1970-01-01
          • 2015-05-15
          • 1970-01-01
          相关资源
          最近更新 更多