首页 文章

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

提问于
浏览
22

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

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

8 回答

  • 4

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

    hash.has_value?(value_you_seek)
    

    要查找与该值关联的键:

    hash.key(value_you_seek)
    

    这个API documentation for Ruby (1.9.2)应该会有所帮助 .

  • 0
  • 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

  • -2

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

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

    这样你就可以按 Value 搜索,并获得你的钥匙!

  • 0

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

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

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

    Hashkey? 方法告诉您是否存在给定的密钥 .

    hash.key?(:some_key)
    
  • 1

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

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

    hash.values.include?(value_you_seek)
    
  • 49

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

相关问题