Ruby regex key search

前端 未结 4 1915
情书的邮戳
情书的邮戳 2021-02-04 13:28

http://ruby-doc.org/core-1.9.3/Hash.html#method-i-include-3F

It is possible to convert hash.has_key?(String) to have a regex search capabilities?

相关标签:
4条回答
  • 2021-02-04 13:45

    I think that using any? is a good solution as stated by qqbenq, but I would prefer using it with grep since it's more succinct.

    hash.keys.grep(/regexp/).any?
    
    0 讨论(0)
  • 2021-02-04 13:54

    I am not aware of an absolute answer for this question but if I were to write a hacky method for this, I would do this

    !!hash.keys.detect{ |k| k.to_s =~ /Your_Regex_here/ }
    

    This will return true when any key matches regex and false otherwise.

    0 讨论(0)
  • 2021-02-04 13:55

    If you are only interested in a yes/no answer, then any? might be a good option:

    hash.keys.any? { |key| key.to_s.match(regexp)}
    

    where regexp is a regular expression.

    0 讨论(0)
  • 2021-02-04 14:08

    I would advise extending Hash with a new method instead of replacing has_key?.

    class Hash
      def has_rkey?(search)
        search = Regexp.new(search.to_s) unless search.is_a?(Regexp)
        !!keys.detect{ |key| key =~ search }
      end
    end
    

    This will work with strings, symbols or a regexp as arguments.

    irb> h = {:test => 1}
     => {:test=>1}  
    irb> h.has_rkey?(:te)
     => true 
    irb> h.has_rkey?("te")
     => true 
    irb> h.has_rkey?(/te/)
     => true 
    irb> h.has_rkey?("foo")
     => false 
    irb> h.has_rkey?(:foo)
     => false 
    irb> h.has_rkey?(/foo/)
     => false 
    
    0 讨论(0)
提交回复
热议问题