GOOGLE ADS

воскресенье, 10 апреля 2022 г.

Преобразовать строки true-false в логические значения и пропустить остальные в хеше

У меня есть хеш, который содержит 2 массива хэшей

h = {
"budget_options"=>[
{"amount"=>"1.0", "text"=>"budget options"},
{"amount"=>"2.0", "most_popular"=>"true", "text"=>"budget options"},
{"amount"=>"3.0", "text"=>"budget options"}
],
"pcb_budget_options"=>[
{"amount"=>"1.0"},
{"amount"=>"0.0"},
{"amount"=>"-1.0", "most_popular"=>"true"}
]
}

Я просто хочу преобразовать значение «most_popular» из строки в логическое значение. Я пытался это сделать, но это заканчивается временной сложностью n3.

Есть ли встроенный метод для этого? Любая помощь будет оценена.


Решение проблемы

Я думаю, это делает то, что вы хотите. Я не рассчитал O этого. Я использовал трюк Marshal#dump/load, чтобы сделать глубокую копию объекта, прежде чем манипулировать им.

mp = "most_popular"
obj = Marshal.load(Marshal.dump(h))
obj.each_key {|k| obj[k].each {|v| v[mp] = v[mp] == "true"? true: false if v[mp] }}

Также см. комментарий Кэри ниже для немного более краткой версии внутреннего блока.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...