gpt4 book ai didi

ruby - 更新 ruby​​ 中的哈希段

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:03 26 4
gpt4 key购买 nike

我有这样的哈希:

fields = {
'0' => {
'field' => 'something',
'field_type' => 'something type',
'validation' => { 'enabled' => 'true', 'persisted' => 'false', 'another thing' => 'false' }
},
'1' => {
'field' => 'something else',
'field_type' => 'something else type',
'validation' => { 'enabled' => 'true', 'persisted' => 'false' }
}
}

在上面的散列中, bool 值是字符串。我希望它们是 bool 值。也可能有许多键/值对,但值将始终为“真”或“假”。这是我的解决方案:

fields
=> {"0"=>{"field"=>"something", "field_type"=>"something type", "validation"=>{"enabled"=>"true", "persisted"=>"false", "another thing"=>"false"}}, "1"=>{"field"=>"something else", "field_type"=>"something else type", "validation"=>{"enabled"=>"true", "persisted"=>"false"}}}
copy = fields.reduce({}) do |acc,(k,v)|
acc[k] = {
'fields' => v['field'],
'field_type' => v['field_type'],
'validation' => v['validation'].reduce({}) {|acc,(k,v)| acc[k] = (v == "true" ) ? true : false; acc; }
}
acc
end
=> {"0"=>{"fields"=>"something", "field_type"=>"something type", "validation"=>{"enabled"=>true, "persisted"=>false, "another thing"=>false}}, "1"=>{"fields"=>"something else", "field_type"=>"something else type", "validation"=>{"enabled"=>true, "persisted"=>false}}}

它有效,但我的直觉是它很慢而且有问题。是否有更有效的方法来执行此操作,也许是内联(无需创建副本)?

最佳答案

这将修改哈希内联:

fields.each do |record, data|
data.each do |field, value|
next unless value.is_a?(Hash)
value.each do |subkey, subvalue|
fields[record][field][subkey] = subvalue == 'true'
end
end
end

基本上,只需遍历每个散列,但将键存储在每个嵌套级别,这样您就可以直接在最内层循环中分配值。

关于ruby - 更新 ruby​​ 中的哈希段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com