хэш удалить ключ и значение элемента - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть следующий хэш:

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

Мне нужно вставить другой элемент в массив хэшей.Но у меня не может быть повторяющейся записи.

Поэтому я должен вставить эту строку:

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

Но сначала мне нужно удалить предыдущую:

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

Как я могу перебрать хеш, найти ключ и значение, удалить и добавить новую запись?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Учитывая переменные:

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}]}
0 голосов
/ 22 ноября 2018

Я предполагаю, что вы имеете в виду такой хеш-код:

 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}}]}

Надеюсь, это ответит на ваш вопрос ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...