在Ruby中,可以使用<<将值追加到现有数组中:
a = []
a << "foo"
但是,您还可以将键/值对附加到现有散列中吗?
h = {}
h << :key "bar"
我知道你能做到:
h[:key] = ""
h[:key] << "bar"
但那不是我想要的。
谢谢。
发布于 2013-11-03 18:22:48
这就是merge!
。
h = {}
h.merge!(key: "bar")
# => {:key=>"bar"}
发布于 2013-11-03 19:41:15
由于哈希本身并不是有序的,所以没有附加的概念。但是,从1.9开始,Ruby散列保持了插入顺序。下面是添加新的键/值对的方法。
最简单的解决方案是
h[:key] = "bar"
如果需要一种方法,请使用store
h.store(:key, "bar")
如果您真的真的想要使用“铲子”运算符(<<
),那么它实际上是作为一个数组附加到散列值的后面,并且您必须指定键:
h[:key] << "bar"
仅当密钥存在时,上述操作才有效。要追加一个新的键,您必须使用默认值初始化散列,您可以这样做:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
你可能会想用猴子补丁Hash来包含一个以你所写的方式工作的铲子操作符:
class Hash
def <<(k,v)
self.store(k,v)
end
end
然而,这并不继承在其他上下文中应用于铲子操作符的“语法糖”:
h << :key, "bar" #doesn't work
h.<< :key, "bar" #works
发布于 2013-11-03 18:18:47
不,我不认为你可以附加键/值对。据我所知,唯一最接近的方法是使用store
方法:
h = {}
h.store("key", "value")
https://stackoverflow.com/questions/19756139
复制