设置几个具有相同值但不同键的哈希参数

kon*_*gun 4 ruby

我的应用程序中有一个构造,我需要这样的哈希:

{ 1 => [6,2,2], 2 => [7,4,5], (3..7) => [7,2,1] }

因此我希望键
3,4,5,6 和7具有相同的值.当然上面的示例不起作用,因为Ruby是智能的并且将哈希键设置为给定:它将范围设置为键:)所以我只能访问我的价值my_hash[(3..7)]my_hash[3],my_hash[4]等等都是零.
当然我可以在哈希之外进行检查或构造来做我需要的东西,但是我很好奇是否可以在不使用哈希声明之外的任何循环的情况下设置这样的哈希?如果没有,最优雅的是什么?谢谢!

Luk*_*uke 5

您可以子类化Hash以便更容易构造此类哈希:

class RangedHash < Hash
  def []=(key, val)
    if key.is_a? Range
      key.each do |k|
        super k, val
      end
    else
      super key, val
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

它的工作原理与普通哈希相同,除非您使用Range键,它会在Range中的每个点设置给定值.

irb(main):014:0> h = RangedHash.new
=> {}
irb(main):015:0> h[(1..5)] = 42
=> 42
irb(main):016:0> h[1]
=> 42
irb(main):017:0> h[5]
=> 42
irb(main):018:0> h['hello'] = 24
=> 24
irb(main):019:0> h['hello']
=> 24
Run Code Online (Sandbox Code Playgroud)