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

tyr*_*ter 25 ruby hash ruby-on-rails

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

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

rkb*_*rkb 53

散列包括Enumerable,因此您可以使用该模块上的许多方法来遍历散列.它也有这个方便的方法:

hash.has_value?(value_you_seek)
Run Code Online (Sandbox Code Playgroud)

要查找与该值关联的键:

hash.key(value_you_seek)
Run Code Online (Sandbox Code Playgroud)

Ruby(1.9.2)的这个API文档应该会有所帮助.

  • 这不会遍历嵌套哈希 (2认同)

Ant*_*rel 5

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

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

如果您还需要使用ActiveSupport在Rails中检查空白值:

h.values_at(:a, :c).all?(&:present?)
Run Code Online (Sandbox Code Playgroud)

要么

h.values_at(:a, :c).none?(&:blank?)
Run Code Online (Sandbox Code Playgroud)

在没有ActiveSupport的Ruby中,也可以通过传递一个块来实现:

h.values_at(:a, :c).all? { |i| i && !i.empty? }
Run Code Online (Sandbox Code Playgroud)