我正在使用Rails,有一个哈希对象。我想要在哈希中搜索特定的值,但是不知道与该值相关联的键。
如何检查哈希中是否存在特定值?另外,如何找到与该特定值相关联的键?
我正在使用Rails,有一个哈希对象。我想要在哈希中搜索特定的值,但是不知道与该值相关联的键。
如何检查哈希中是否存在特定值?另外,如何找到与该特定值相关联的键?
哈希包含Enumerable,因此您可以使用该模块上的许多方法来遍历哈希。它还具有这个方便的方法:
hash.has_value?(value_you_seek)
要找到与该值相关联的键:
hash.key(value_you_seek)
这个Ruby(1.9.2)的API文档应该会有所帮助。
h = { a: :b, c: :d }
h.values_at(:a, :c).all? #=> true
h.values_at(:a, :x).all? #=> false
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? }
h.values_at(:a, :c).all?(&:present?)
不起作用。 - damuz91available_sports = [{name:'baseball', label:'MLB 棒球'},{name:'tackle_football', label:'NFL 橄榄球'}]
像这样做就可以实现:
available_sports.any? {|h| h['name'] == 'basketball'}
=> false
available_sports.any? {|h| h['name'] == 'tackle_football'}
=> true
虽然Hash#has_key?
仍然可用,但正如Matz在这里所写的那样,它已经被弃用,推荐使用Hash#key?
。
Hash
的key?
方法可以告诉你给定的键是否存在。
hash.key?(:some_key)
Hash
类有select方法,该方法将返回一个新的散列,其中条目的块为真;
h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| v == 200} #=> {"b" => 200}
这样你就可以通过值进行搜索,并获得对应的键!
你可以使用更短的版本 hash.values