http://ruby-doc.org/core-1.9.3/Hash.html#method-i-include-3F
hash.has_key?(String)を正規表現検索機能を持つように変換することは可能ですか?
http://ruby-doc.org/core-1.9.3/Hash.html#method-i-include-3F
hash.has_key?(String)を正規表現検索機能を持つように変換することは可能ですか?
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
any?
qqbenqで述べられているように、使用することは良い解決策だと思いますが、grep
より簡潔なので、一緒に使用することをお勧めします。
hash.keys.grep(/regexp/).any?
はい/いいえの答えだけに興味がある場合はany?
、良いオプションかもしれません:
hash.keys.any? { |key| key.to_s.match(regexp)}
ここregexp
で、は正規表現です。
私はこの質問に対する絶対的な答えを知りませんが、これに対してハッキーなメソッドを書くとしたら、これを行います
!!hash.keys.detect{ |k| k.to_s =~ /Your_Regex_here/ }
true
これは、いずれかのキーが正規表現などに一致する場合に返されfalse
ます。