我正在使用Rails,我有一个哈希对象 . 我想在哈希中搜索特定值 . 我不知道与该值相关的键 .
如何检查散列中是否存在特定值?另外,如何找到与该特定值相关联的密钥?
散列包含Enumerable,因此您可以使用该模块上的许多方法来遍历散列 . 它也有这个方便的方法:
hash.has_value?(value_you_seek)
要查找与该值关联的键:
hash.key(value_you_seek)
这个API documentation for Ruby (1.9.2)应该会有所帮助 .
Hash.has_value?和Hash.key .
想象一下,你有以下 Array 的哈希
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 具有select方法,该方法将返回块为真的条目的新哈希;
Hash
h = { "a" => 100, "b" => 200, "c" => 300 } h.select {|k,v| v == 200} #=> {"b" => 200}
这样你就可以按 Value 搜索,并获得你的钥匙!
检查多个值的最简单方法是在哈希中:
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?)
没有ActiveSupport的Ruby中的相同内容可以通过传递一个块来完成:
h.values_at(:a, :c).all? { |i| i && !i.empty? }
虽然 Hash#has_key? 有效但是,正如Matz写的here,它已被弃用,而有利于 Hash#key? .
Hash#has_key?
Hash#key?
Hash 的 key? 方法告诉您是否存在给定的密钥 .
key?
hash.key?(:some_key)
如果你做 hash.values ,你现在有了一个数组 .
hash.values
在数组上,您可以使用Enumerable搜索方法include?
hash.values.include?(value_you_seek)
您可以使用的更短版本将是 hash.values
8 回答
散列包含Enumerable,因此您可以使用该模块上的许多方法来遍历散列 . 它也有这个方便的方法:
要查找与该值关联的键:
这个API documentation for Ruby (1.9.2)应该会有所帮助 .
Hash.has_value?和Hash.key .
想象一下,你有以下
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
具有select方法,该方法将返回块为真的条目的新哈希;这样你就可以按 Value 搜索,并获得你的钥匙!
检查多个值的最简单方法是在哈希中:
如果您还需要使用ActiveSupport检查Rails中的空白值:
要么
没有ActiveSupport的Ruby中的相同内容可以通过传递一个块来完成:
虽然
Hash#has_key?
有效但是,正如Matz写的here,它已被弃用,而有利于Hash#key?
.Hash
的key?
方法告诉您是否存在给定的密钥 .如果你做
hash.values
,你现在有了一个数组 .在数组上,您可以使用Enumerable搜索方法include?
您可以使用的更短版本将是
hash.values