10

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

hash.has_key?(String)を正規表現検索機能を持つように変換することは可能ですか?

4

4 に答える 4

11

Hashを置き換えるのではなく、新しい方法で拡張することをお勧めし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

これは、引数として文字列、記号、または正規表現で機能します。

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 
于 2012-08-16T16:43:54.410 に答える
8

any?qqbenqで述べられているように、使用することは良い解決策だと思いますが、grepより簡潔なので、一緒に使用することをお勧めします。

hash.keys.grep(/regexp/).any?
于 2016-12-22T17:44:46.277 に答える
7

はい/いいえの答えだけに興味がある場合はany?、良いオプションかもしれません:

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

ここregexpで、は正規表現です。

于 2015-09-04T10:58:30.137 に答える
4

私はこの質問に対する絶対的な答えを知りませんが、これに対してハッキーなメソッドを書くとしたら、これを行います

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

trueこれは、いずれかのキーが正規表現などに一致する場合に返されfalseます。

于 2012-08-16T16:44:17.880 に答える