在Ruby哈希中使用正则表达式作为关键字

3
我有哈希映射。
H = {
    "alc" => "AL",
    "alco" => "AL",
    "alcoh" => "AL",
    "alcohol" => "AL",
    "alcoholic" => "AL",
}

现在我想使用正则表达式来表示所有的键,例如:

H={
    /^alc/ => "AL"
}

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


你想使用哈希中的键动态构建正则表达式吗? - OpenCoderX
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'

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

当我在编码时,你已经发布了你的答案。我只有在发布后才看到你的答案...同样的事情也可以用许多不同的编码方式来实现。你的实现方式会不同吗? - Kassym Dorsel
可能会有一点变化,但概念保持不变。类似于 self.each{|key, value| return value if exp=~key} - André Medeiros

5

创建一个子类,继承Hash类并重写[]行为,使其检查它是否与哈希表中的每个正则表达式匹配,并返回相应的值。


最好只在实例上覆盖[],不需要子类。 - steenslag
1
除非他希望使用重写方法创建多个实例。 - André Medeiros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接