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 に答える