特定のキーがハッシュに存在するかどうかを確認するにはどうすればよいですか?


636

「ユーザー」キーがセッションハッシュに存在するかどうかを確認したいと思います。これどうやってするの?

キーの値がnilかどうかを確認したくないことに注意してください。「ユーザー」キーが存在するかどうかを確認したいだけです。

回答:


952

Hashkey?メソッドは、指定されたキーが存在するかどうかを通知します。

session.key?("user")

nice: "string"アクセサーはJSON.parse解析済みオブジェクトでも機能します:)
Bijan

2
これは私には機能しません。代わりに:userメソッドが機能しました
Akash Agarwal 2017年


41

最新のRubyバージョンでは、ハッシュインスタンスにはkey?メソッドがあります。

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

ハッシュの内容に応じて、必ず記号キーまたは文字列キーを使用してください。

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

2
見習いはRuby 1.6として早くから存在していました:ruby-doc.com/docs/ProgrammingRuby/html/…(おそらく以前は、文書化された場所をチェックする場所は知らないでしょう)
Beni Cherniavsky-Paskin

28

非常に遅いですが、できれば記号をキーとして使用する必要があります。

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"]同じレコードを指すようになります


6
Railsを使用Hash#with_indifferent_accessしている場合は、これを回避するために使用できます。両方:my_key"my_key"同じレコードを指すようになります
デボンパーソンズ

5

Hash#key?キーを使用してハッシュに存在するかどうかをいつでも確認できます。

そうでなければそれはあなたを返します false

hash =  { one: 1, two:2 }

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

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


0

Rails 5では、has_key?メソッドは、キーがハッシュに存在するかどうかをチェックします。使用する構文は次のとおりです。

YourHash.has_key? :yourkey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.