如何检查哈希中是否存在特定密钥?

Moh*_*ain 601 ruby associative-array ruby-on-rails data-structures

我想检查会话哈希中是否存在"用户"密钥.我怎样才能做到这一点?

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

sep*_*p2k 904

Hashkey?方法告诉你是否存在给定的密钥.

session.key?("user")
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说不起作用,用户方法改为工作 (2认同)

Boz*_*sov 288

Hash#has_key?正如Matz 在这里指出的那样,虽然完成了工作,但它已经被弃用了Hash#key?.

hash.key?(some_key)
Run Code Online (Sandbox Code Playgroud)


ins*_*ero 38

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

{a: 1}.key?(:a)
=> true
Run Code Online (Sandbox Code Playgroud)

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

{'a' => 2}.key?(:a)
=> false
Run Code Online (Sandbox Code Playgroud)

  • 早在Ruby 1.6上就已存在:http://ruby-doc.com/docs/ProgrammingRuby/html/ref_c_hash.html#Hash.key_qm(也许更早,dunno在哪里检查记录) (2认同)

G.B*_*G.B 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 
Run Code Online (Sandbox Code Playgroud)

但是当你将字符串作为键传递时创建哈希,那么它将在键中搜索字符串.

但是在创建哈希时,你将符号作为键传递给has_key?将使用符号搜索键.


如果您使用Rails,可以使用Hash#with_indifferent_access以避免这种情况; 双方hash[:my_key]hash["my_key"]会指向相同的记录

  • 如果你使用Rails,你可以使用`Hash #with_indifferent_access`来避免这种情况; `:my_key`和`"my_key"`将指向同一条记录 (5认同)

Arv*_*ngh 6

另一种方式在这里

hash = {one: 1, two: 2}

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

hash.member?(:five)
#=> false
Run Code Online (Sandbox Code Playgroud)


Dee*_*ale 5

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

如果没有它会返回你 false

hash =  { one: 1, two:2 }

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

hash.key?(:four)
#=> false
Run Code Online (Sandbox Code Playgroud)