Я пытаюсь суммировать значения из хэша, и у меня неожиданное (для меня) поведение.Ниже приведен код, который воспроизводит поведение.
records = [
{ "id" => 5062311, "period" => "May 27, 2018", "items" => 2, "compliant_items" => 2 },
{ "id" => 5062311, "period" => "May 20, 2018", "items" => 3, "compliant_items" => 1 },
{ "id" => 5062311, "period" => "May 13, 2018", "items" => 7, "compliant_items" => 7 },
{ "id" => 5062311, "period" => "May 13, 2018", "items" => 8, "compliant_items" => 7 },
{ "id" => 5062311, "period" => "Jun 03, 2018", "items" => 6, "compliant_items" => 6 }
]
Создать выходной хэш
items = records.flat_map { |item| item["id"] }.uniq
weeks = records.flat_map { |item| item["period"] }.uniq
temp = items.each_with_object({}) { |item, hash| hash[item] = weeks.product(["total" => 0, "compliant" => 0]).to_h }
Вывод для "temp" выглядит следующим образом ...
{
5062311=>{
"May 27, 2018"=>{"total"=>0, "compliant"=>0},
"May 20, 2018"=>{"total"=>0, "compliant"=>0},
"May 13, 2018"=>{"total"=>0, "compliant"=>0},
"Jun 03, 2018"=>{"total"=>0, "compliant"=>0}
}
}
Теперь, если я попытаюсь изменить определенный ключзначение, каждый второй ключ также обновляется.Например, следующее:
temp[5062311]["May 20, 2018"]["total"] += 5
приводит к ...
{
5062311=>{
"May 27, 2018"=>{"total"=>5, "compliant"=>0},
"May 20, 2018"=>{"total"=>5, "compliant"=>0},
"May 13, 2018"=>{"total"=>5, "compliant"=>0},
"Jun 03, 2018"=>{"total"=>5, "compliant"=>0}
}
}
Я ожидаю, что будет обновлена только запись 20 мая, а все остальные значения останутся равными 0. IЯ не уверен, как переписать это, чтобы обойти это поведение.Какие-либо предложения?Спасибо.