如何检查散列中是否存在特定值?

时间:2012-01-26 00:17:51

标签: ruby-on-rails ruby hash

我正在使用Rails,我有一个哈希对象。我想在哈希中搜索特定值。我不知道与该值相关的密钥。

如何检查散列中是否存在特定值?另外,如何找到与该特定值相关联的密钥?

8 个答案:

答案 0 :(得分:51)

哈希包含Enumerable,因此您可以使用该模块上的许多方法来遍历哈希。它也有这个方便的方法:

hash.has_value?(value_you_seek)

要查找与该值相关联的密钥:

hash.key(value_you_seek)

API documentation for Ruby (1.9.2)应该会有所帮助。

答案 1 :(得分:4)

答案 2 :(得分:2)

检查哈希中是否存在多个值的最简单方法是:

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? }

答案 3 :(得分:2)

想象一下,您有以下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

答案 4 :(得分:1)

Hash具有select方法,该方法将返回块为真的条目的新哈希值;

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

这样你就可以按价值搜索,并获得你的密钥!

答案 5 :(得分:0)

虽然Hash#has_key?有效但是,正如Matz写的here,它已被弃用,而不是Hash#key?

Hash' key?方法告诉您是否存在给定密钥。

hash.key?(:some_key)

答案 6 :(得分:0)

如果你hash.values,你现在有一个数组。

在数组上,您可以使用Enumerable搜索方法include?

hash.values.include?(value_you_seek)

答案 7 :(得分:-2)

您可以使用的更短版本是hash.values