web-dev-qa-db-ja.com

特定の値がハッシュに存在するかどうかを確認する方法は?

Railsを使用しています。ハッシュオブジェクトがあります。特定の値のハッシュを検索したいです。その値に関連付けられているキーがわかりません。

特定の値がハッシュに存在するかどうかを確認するにはどうすればよいですか?また、その特定の値に関連付けられているキーを見つけるにはどうすればよいですか?

25
tyronegcarter

ハッシュには Enumerable が含まれているため、そのモジュールで多くのメソッドを使用してハッシュをトラバースできます。また、この便利なメソッドがあります:

hash.has_value?(value_you_seek)

その値に関連付けられているキーを見つけるには:

hash.key(value_you_seek)

この Ruby(1.9.2) のAPIドキュメントが役立つはずです。

53
rkb
4
Val Akkapeddi

ハッシュに複数の値が存在することを確認する最も簡単な方法は次のとおりです。

h = { a: :b, c: :d }
h.values_at(:a, :c).all? #=> true
h.values_at(:a, :x).all? #=> false

ActiveSupportでRailsの空白値も確認する必要がある場合:

h.values_at(:a, :c).all?(&:present?)

または

h.values_at(:a, :c).none?(&:blank?)

ブロックを渡すことでRuby ActiveSupportなしで同じことができます:

h.values_at(:a, :c).all? { |i| i && !i.empty? }
4
Anton Orel

次のArrayのハッシュがあると想像してください

available_sports = [{name:'baseball', label:'MLB Baseball'},{name:'tackle_football', label:'NFL Football'}]

このようなことを行うと、トリックを行います

available_sports.any? {|h| h['name'] == 'basketball'}

=> false


available_sports.any? {|h| h['name'] == 'tackle_football'}

=> true

3
d1jhoni1b

クラスHashには、ブロックがtrueであるエントリの新しいハッシュを返す select メソッドがあります。

h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| v == 200}  #=> {"b" => 200}

この方法で、値で検索し、キーを取得します!

1
siame

もしあなたがそうするなら hash.values、これで配列ができました。

配列では、Enumerable検索メソッドを利用できます include?

hash.values.include?(value_you_seek)
0
Fellow Stranger

Hash#has_key?は機能しますが、Matzが here を書いたように、Hash#key?

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

hash.key?(:some_key)
0
Subhash Chandra