ruby可以将键/值对附加到现有的散列中吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

在Ruby中,可以使用<<将值添加到现有数组:

a = []
a << "foo"

但是,可以将键/值对添加到现有的散列吗?

h = {}
h << :key "bar"

我知道可以这样做:

h[:key] = ""
h[:key] << "bar"

但那不是我想要的。

提问于
用户回答回答于
用户回答回答于

由于哈希不是固有的命令,所以没有追加的概念。不过,自从1.9维持插入顺序以来,Ruby哈希依然存在

以下是添加新键/值对的方法。

最简单的解决方案是

h[:key] = "bar"

如果你想要一个方法,使用store

h.store(:key, "bar")

如果你确实想要使用“<<”操作,它实际上是将散列的值附加为数组,并且必须指定键:

h[:key] << "bar"

以上仅适用于密钥存在的情况。要附加一个新的密钥,你必须用默认值初始化散列,你可以这样做:

h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"

你可能会想要修补哈希以包含一个<<操作符,该操作符按照你所写的方式工作:

class Hash
  def <<(k,v)
    self.store(k,v)
  end
end
h << :key, "bar" #doesn't work
h.<< :key, "bar" #works

扫码关注云+社区