有没有更有效的方法来重构 ruby 上的哈希迭代?
Is there a more efficient way to refactor the iteration of the hash on ruby?
我这里有一个迭代:
container = []
summary_data.each do |_index, data|
container << data
end
下面列出了summary_data
的结构:
summary_data = {
"1" => { orders: { fees: '25.00' } },
"3" => { orders: { fees: '30.00' } },
"6" => { orders: { fees: '45.00' } }
}
我想删除数字键,例如“1”、“3”。
我希望得到以下内容 container
:
[
{
"orders": {
"fees": "25.00"
}
},
{
"orders": {
"fees": "30.00"
}
},
{
"orders": {
"fees": "45.00"
}
}
]
有没有更有效的方法来重构上面的代码?
感谢您的帮助。
你可以使用Hash#values
方法,像这样:
container = summary_data.values
您需要一个包含提供的散列值的数组。可以直接通过values方法获取。
summary_data.values
如果内部哈希都具有相同的结构,那么唯一有趣的信息就是费用:
summary_data.values.map{|h| h[:orders][:fees] }
# => ["25.00", "30.00", "45.00"]
如果您想对这些费用进行一些计算,可以将它们转换为数字:
summary_data.values.map{|h| h[:orders][:fees].to_f }
# => [25.0, 30.0, 45.0]
将分用作整数可能会更好,以避免任何浮点错误:
summary_data.values.map{|h| (h[:orders][:fees].to_f * 100).round }
=> [2500, 3000, 4500]
我这里有一个迭代:
container = []
summary_data.each do |_index, data|
container << data
end
下面列出了summary_data
的结构:
summary_data = {
"1" => { orders: { fees: '25.00' } },
"3" => { orders: { fees: '30.00' } },
"6" => { orders: { fees: '45.00' } }
}
我想删除数字键,例如“1”、“3”。
我希望得到以下内容 container
:
[
{
"orders": {
"fees": "25.00"
}
},
{
"orders": {
"fees": "30.00"
}
},
{
"orders": {
"fees": "45.00"
}
}
]
有没有更有效的方法来重构上面的代码?
感谢您的帮助。
你可以使用Hash#values
方法,像这样:
container = summary_data.values
您需要一个包含提供的散列值的数组。可以直接通过values方法获取。
summary_data.values
如果内部哈希都具有相同的结构,那么唯一有趣的信息就是费用:
summary_data.values.map{|h| h[:orders][:fees] }
# => ["25.00", "30.00", "45.00"]
如果您想对这些费用进行一些计算,可以将它们转换为数字:
summary_data.values.map{|h| h[:orders][:fees].to_f }
# => [25.0, 30.0, 45.0]
将分用作整数可能会更好,以避免任何浮点错误:
summary_data.values.map{|h| (h[:orders][:fees].to_f * 100).round }
=> [2500, 3000, 4500]