哈希删除项的键和值

时间:2018-11-22 12:58:59

标签: ruby

我有以下哈希值:

{
  "itens":
  [
     {"year": "2018", "data": "id": 1},
     {"year": "2018", "data": "id": 2}
  ]
}

我需要在哈希数组中插入另一个元素。但是我不能重复输入。

所以我必须插入这一行:

{"year": "2019", "data": "id": 2}

但是首先我需要删除之前的内容:

{"year": "2018", "data": "id": 2}

如何遍历哈希,查找键和值,删除并添加新条目?

谢谢。

2 个答案:

答案 0 :(得分:0)

我假设您的意思是这样的哈希:

 hash = { 
   items: [
     {year: 2018, data: { id: 1 }},
     {year: 2018, data: { id: 2 }}
   ]
 }

例如,您可以通过以下方式对其进行更改:

item = {year: 2019, data: { id: 2 }}
hash[:items].delete_if do |stored_hash|
    stored_hash[:data][:id] == item[:data][:id]
end
hash[:items] << item

比这会导致以下结果:

hash

=> {:items=>[{:year=>2018, :data=>{:id=>1}}, {:year=>2019, :data=>{:id=>2}}]}

我希望这能回答您的问题...

答案 1 :(得分:0)

给出变量:

myhash = {
  "itens":
  [
     {"year": "2018", "data": nil, "id": 1},
     {"year": "2018", "data": nil, "id": 2}
  ]
}

insert = {"year": "2019", "data": "something", "id": 2}
remove = {"year": "2018", "data": nil, "id": 2}

如果insertremove具有相同的键,则可以执行以下操作:

myhash[:'itens'].find { |h| h[:'id'] == insert[:'id'] }.merge! insert

#=> {:itens=>[{:year=>"2018", :data=>nil, :id=>1}, {:year=>"2019", :data=>"something", :id=>2}]}