我有哈希映射
H = {
"alc" => "AL",
"alco" => "AL",
"alcoh" => "AL",
"alcohol" => "AL",
"alcoholic" => "AL",
}
现在我想用一个正则表达式来表示所有的键,比如 H={ /^alc/ => "AL" }
稍后我想使用 H["alc"] 或 H["alco"] 来检索值。但如果我使用正则表达式,我无法正确获取值。我应该怎么办?
class MyHash < Hash
def [](a)
self.select {|k| k =~ a}.shift[1]
end
end
result = MyHash.new
result[/^alc/] = "AL"
puts result['alcohol'] #=> 'AL'
我会创建一个哈希的子类,然后重写这个方法。这样,您仍然可以将常规散列功能保留在其他地方。
创建一个子类,继承Hash
类并覆盖[]
行为,以便检查它是否匹配散列中的每个正则表达式并返回相应的值。