Arrays ruby如何将哈希元素添加到现有json数组中

Arrays ruby如何将哈希元素添加到现有json数组中,arrays,json,ruby,hash,Arrays,Json,Ruby,Hash,我有输出以下内容的代码: car_id = ["123"] model = [:model].product(car_id).map { |k,v| {k=>v} } model = [{:model=>"123"}] 然后我想在json中添加一个新的hash:make,如下所示: model_with_make = [{:model=>"123", :make => "acura"}] 我该怎么做 不幸的是,我找到的每个解决方案都会产生以下结果: [{:model=

我有输出以下内容的代码:

car_id = ["123"]
model = [:model].product(car_id).map { |k,v| {k=>v} }
model = [{:model=>"123"}]
然后我想在json中添加一个新的hash
:make
,如下所示:

model_with_make = [{:model=>"123", :make => "acura"}]
我该怎么做

不幸的是,我找到的每个解决方案都会产生以下结果:
[{:model=>“123”},{:make=>“acura”}]
这不是我想要的

model = [{:model=>"123"}]
model_with_make = model.map { |m| m.merge(make: 'acura') }
#⇒ [{:model=>"123", :make => "acura"}]
如果您担心数组
模型
中只有一个元素,您可以就地修改它:

model.first.merge!(make: 'acura')
model
#⇒ [{:model=>"123", :make => "acura"}]
如果您担心数组
模型
中只有一个元素,您可以就地修改它:

model.first.merge!(make: 'acura')
model
#⇒ [{:model=>"123", :make => "acura"}]

显示计算结果的Ruby约定

我想你是这个意思吧

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"}]
计算数组

其次,

但是当数组
[:model]
car\u id
都包含单个元素时,为什么要使用它呢?写起来更简单

arr = [[:model, car_id.first]]
  #=> [[:model, "123"]]
将数组转换为哈希值

由于
arr
只包含一个元素,因此
map
ping它没有多大意义;只需将其转换为哈希:

Hash[arr]
  #=> {:model=>"123"} 
或者(对于Ruby版本1.9+):

将键值对添加到哈希中

如果您希望将键值对
:make=>“acura”
添加到

h = {:model=>"123"} 
你可以简单地写

h[:make] = "acura"
  #=> "acura" 
h #=> {:model=>"123", :make=>"acura"}  
或者,在一行中

(h[:make] = "acura") && h
  #=> {:model=>"123", :make=>"acura"}
收尾

把这些放在一起,你就可以写了

h = [[:model, car_id.first]].to_h
  #=> {:model=>"123"} 
(h[:make] = "acura") && h
  #=> {:model=>"123", :make=>"acura"} 

显示计算结果的Ruby约定

我想你是这个意思吧

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"}]
计算数组

其次,

但是当数组
[:model]
car\u id
都包含单个元素时,为什么要使用它呢?写起来更简单

arr = [[:model, car_id.first]]
  #=> [[:model, "123"]]
将数组转换为哈希值

由于
arr
只包含一个元素,因此
map
ping它没有多大意义;只需将其转换为哈希:

Hash[arr]
  #=> {:model=>"123"} 
或者(对于Ruby版本1.9+):

将键值对添加到哈希中

如果您希望将键值对
:make=>“acura”
添加到

h = {:model=>"123"} 
你可以简单地写

h[:make] = "acura"
  #=> "acura" 
h #=> {:model=>"123", :make=>"acura"}  
或者,在一行中

(h[:make] = "acura") && h
  #=> {:model=>"123", :make=>"acura"}
收尾

把这些放在一起,你就可以写了

h = [[:model, car_id.first]].to_h
  #=> {:model=>"123"} 
(h[:make] = "acura") && h
  #=> {:model=>"123", :make=>"acura"}