首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby语言中使用<<将键/值对附加到散列

在Ruby语言中使用<<将键/值对附加到散列
EN

Stack Overflow用户
提问于 2013-11-04 02:03:49
回答 5查看 188.8K关注 0票数 86

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

代码语言:javascript
复制
a = []
a << "foo"

但是,您还可以将键/值对附加到现有散列中吗?

代码语言:javascript
复制
h = {}
h << :key "bar"

我知道你能做到:

代码语言:javascript
复制
h[:key] = ""
h[:key] << "bar"

但那不是我想要的。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-04 02:22:48

这就是merge!

代码语言:javascript
复制
h = {}
h.merge!(key: "bar")
# => {:key=>"bar"}
票数 148
EN

Stack Overflow用户

发布于 2013-11-04 03:41:15

由于哈希本身并不是有序的,所以没有附加的概念。但是,从1.9开始,Ruby散列保持了插入顺序。下面是添加新的键/值对的方法。

最简单的解决方案是

代码语言:javascript
复制
h[:key] = "bar"

如果需要一种方法,请使用store

代码语言:javascript
复制
h.store(:key, "bar")

如果您真的真的想要使用“铲子”运算符(<<),那么它实际上是作为一个数组附加到散列值的后面,并且您必须指定键:

代码语言:javascript
复制
h[:key] << "bar"

仅当密钥存在时,上述操作才有效。要追加一个新的键,您必须使用默认值初始化散列,您可以这样做:

代码语言:javascript
复制
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"

你可能会想用猴子补丁Hash来包含一个以你所写的方式工作的铲子操作符:

代码语言:javascript
复制
class Hash
  def <<(k,v)
    self.store(k,v)
  end
end

然而,这并不继承在其他上下文中应用于铲子操作符的“语法糖”:

代码语言:javascript
复制
h << :key, "bar" #doesn't work
h.<< :key, "bar" #works
票数 93
EN

Stack Overflow用户

发布于 2013-11-04 02:18:47

不,我不认为你可以附加键/值对。据我所知,唯一最接近的方法是使用store方法:

代码语言:javascript
复制
h = {}
h.store("key", "value")
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19756139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档