Ruby正则表达式密钥搜索

Mr.*_*ael 10 ruby hashmap

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

可以将hash.has_key?(String)转换为具有正则表达式搜索功能?

Kyl*_*yle 10

我建议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
Run Code Online (Sandbox Code Playgroud)

这将使用字符串,符号或正则表达式作为参数.

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 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会将哈希数据结构的查找时间复杂度从O(1)更改为O(n)...这取决于您的预期用法可能完全消除使用哈希的好处. (2认同)

Ada*_*dam 8

我认为使用any?是qqbenq所说的一个很好的解决方案,但我更喜欢使用它,grep因为它更简洁. any?


qqb*_*enq 7

如果您只对是/否答案感兴趣,那么any?可能是一个不错的选择:

hash.keys.any? { |key| key.to_s.match(regexp)}
Run Code Online (Sandbox Code Playgroud)

哪里regexp是正则表达式.