我有以下哈希值:
{
"itens":
[
{"year": "2018", "data": "id": 1},
{"year": "2018", "data": "id": 2}
]
}
我需要在哈希数组中插入另一个元素。但是我不能重复输入。
所以我必须插入这一行:
{"year": "2019", "data": "id": 2}
但是首先我需要删除之前的内容:
{"year": "2018", "data": "id": 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}
如果insert
和remove
具有相同的键,则可以执行以下操作:
myhash[:'itens'].find { |h| h[:'id'] == insert[:'id'] }.merge! insert
#=> {:itens=>[{:year=>"2018", :data=>nil, :id=>1}, {:year=>"2019", :data=>"something", :id=>2}]}