我的代码输出如下:
car_id = ["123"]
model = [:model].product(car_id).map { |k,v| {k=>v} }
model = [{:model=>"123"}]
我想在json中添加一个新的哈希:make
,如下所示:
model_with_make = [{:model=>"123", :make => "acura"}]
我该怎么做?
不幸的是,我发现的每个解决方案都会产生这样
[{:model=>"123"}, {:make => "acura"}]
这不是我想要的。
答案 0 :(得分:2)
用于显示计算结果的Ruby约定
我认为你的意思是
argparse
生成一个包含单个哈希的数组:
model = [:model].product(car_id).map { |k,v| {k=>v} }
并且您当时没有执行语句:
[{:model=>"123"}]
会覆盖前一个语句中model = [{:model=>"123"}]
的值,使前一个语句变得毫无意义。如果是这样,写入的正常方法如下。
model
计算数组
接下来,
model = [:model].product(car_id).map { |k,v| {k=>v} }
#=> [{:model=>"123"}]
但是,当数组arr = [:model].product(car_id)
#=> [[:model, "123"]]
和[:model]
都包含单个元素时,为什么要使用Array#product?只写
car_id
将数组转换为哈希
由于arr = [[:model, car_id.first]]
#=> [[:model, "123"]]
只包含一个元素,因此arr
ping它并不重要;只需将其转换为哈希:
map
或(对于Ruby版本1.9 +):
Hash[arr]
#=> {:model=>"123"}
将一个键值对添加到哈希
如果您希望将键值对arr.to_h
#=> {:model=>"123"}
添加到
:make => "acura"
你可以简单地写
h = {:model=>"123"}
或者,在一行中,
h[:make] = "acura"
#=> "acura"
h #=> {:model=>"123", :make=>"acura"}
结束
把它们放在一起,你可以写
(h[:make] = "acura") && h
#=> {:model=>"123", :make=>"acura"}
答案 1 :(得分:1)
model = [{:model=>"123"}]
model_with_make = model.map { |m| m.merge(make: 'acura') }
#⇒ [{:model=>"123", :make => "acura"}]
如果您担心数组model
中只有一个元素,您可以在其中修改它:
model.first.merge!(make: 'acura')
model
#⇒ [{:model=>"123", :make => "acura"}]