3

我有哈希映射

H = {
    "alc" => "AL",
    "alco" => "AL",
    "alcoh" => "AL",
    "alcohol" => "AL",
    "alcoholic" => "AL",
}

现在我想用一个正则表达式来表示所有的键,比如 H={ /^alc/ => "AL" }

稍后我想使用 H["alc"] 或 H["alco"] 来检索值。但如果我使用正则表达式,我无法正确获取值。我应该怎么办?

4

2 回答 2

6
class MyHash < Hash
  def [](a)
    self.select {|k| k =~ a}.shift[1]
  end
end

result = MyHash.new

result[/^alc/] = "AL"

puts result['alcohol'] #=> 'AL'

我会创建一个哈希的子类,然后重写这个方法。这样,您仍然可以将常规散列功能保留在其他地方。

于 2012-06-27T19:52:16.817 回答
5

创建一个子类,继承Hash类并覆盖[]行为,以便检查它是否匹配散列中的每个正则表达式并返回相应的值。

于 2012-06-27T19:45:30.263 回答