【发布时间】:2011-05-30 12:49:48
【问题描述】:
我想检查会话哈希中是否存在“用户”键。我该怎么做?
请注意,我不想检查键的值是否为零。我只想检查“用户” key 是否存在。
【问题讨论】:
标签: ruby data-structures associative-array
我想检查会话哈希中是否存在“用户”键。我该怎么做?
请注意,我不想检查键的值是否为零。我只想检查“用户” key 是否存在。
【问题讨论】:
标签: ruby data-structures associative-array
Hash 的key? 方法告诉您给定的键是否存在。
session.key?("user")
【讨论】:
虽然 Hash#has_key? 完成了工作,但正如 Matz 所说的 here,它已被弃用,取而代之的是 Hash#key?。
hash.key?(some_key)
【讨论】:
【讨论】:
已经很晚了,但最好使用符号作为键:
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" 都将指向同一条记录
my_hash.has_key? my_key.to_sym :)
这里有另一种方式
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false
【讨论】:
您始终可以使用Hash#key? 检查密钥是否存在于散列中。
如果不是,它将返回您false
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false
【讨论】:
在 Rails 5 中,has_key? 方法检查 key 是否存在于散列中。使用它的语法是:
YourHash.has_key? :yourkey
【讨论】:
您可以使用 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
【讨论】: