web-dev-qa-db-ja.com

ハッシュ内に特定のキーが存在するかどうかを確認する方法

セッションハッシュに "user"キーが存在するかどうかを確認したいのですが。これどうやってするの?

キーの値がnilかどうかをチェックしたくないことに注意してください。私はただ "user" key が存在するかどうかを調べたいだけです。

564
Mohit Jain

Hashkey?メソッドは与えられたキーが存在するかどうかを教えてくれます。

session.key?("user")
847
sepp2k

Matz氏が ここ で指摘しているように、Hash#has_key?が仕事をこなす一方で、Hash#key?を支持して廃止予定となっています。

hash.key?(some_key)
270
Bozhidar Batsov

最新のRubyバージョンでは、Hashインスタンスは key? メソッドを持っています。

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

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

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

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

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"]は同じレコードを指します。

27
G.B

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

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

hash =  { one: 1, two:2 }

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

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

別の方法はここにあります

hash = {one: 1, two: 2}

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

hash.member?(:five)
#=> false
2
Arvind singh