Railsを使用しています。ハッシュオブジェクトがあります。特定の値のハッシュを検索したいです。その値に関連付けられているキーがわかりません。
特定の値がハッシュに存在するかどうかを確認するにはどうすればよいですか?また、その特定の値に関連付けられているキーを見つけるにはどうすればよいですか?
ハッシュには Enumerable が含まれているため、そのモジュールで多くのメソッドを使用してハッシュをトラバースできます。また、この便利なメソッドがあります:
hash.has_value?(value_you_seek)
その値に関連付けられているキーを見つけるには:
hash.key(value_you_seek)
この Ruby(1.9.2) のAPIドキュメントが役立つはずです。
Hash.has_value? および Hash.key 。
ハッシュに複数の値が存在することを確認する最も簡単な方法は次のとおりです。
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? }
次の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
クラスHash
には、ブロックがtrueであるエントリの新しいハッシュを返す select メソッドがあります。
h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| v == 200} #=> {"b" => 200}
この方法で、値で検索し、キーを取得します!
もしあなたがそうするなら hash.values
、これで配列ができました。
配列では、Enumerable検索メソッドを利用できます include?
hash.values.include?(value_you_seek)
Hash#has_key?
は機能しますが、Matzが here を書いたように、Hash#key?
。
Hash
のkey?
メソッドは、指定されたキーが存在するかどうかを示します。
hash.key?(:some_key)