我在使用MongoDB的时候遇到了一些问题,它总是返回带有双引号键和整数作为浮点数的哈希值。这个问题有没有困扰过其他人呢?
例如,在进行map reduce或分组操作之后,我得到了一堆像这样的哈希值:
{"unknown"=>54.0, "pedestrians"=>572.0, "vehicles"=>1045.0}
但是我真正想要的是:
{ unknown: 54, pedestrians: 572, vehicles: 1045 }
有什么简单的方法可以帮我进行转换吗?
我在使用MongoDB的时候遇到了一些问题,它总是返回带有双引号键和整数作为浮点数的哈希值。这个问题有没有困扰过其他人呢?
例如,在进行map reduce或分组操作之后,我得到了一堆像这样的哈希值:
{"unknown"=>54.0, "pedestrians"=>572.0, "vehicles"=>1045.0}
但是我真正想要的是:
{ unknown: 54, pedestrians: 572, vehicles: 1045 }
有什么简单的方法可以帮我进行转换吗?
你可以这样做:
original = {"unknown"=>54.0, "pedestrians"=>572.0, "vehicles"=>1045.0}
converted = Hash[ original.map { |key, value| [key.to_sym, value.to_i] } ]
如果你在使用Rails,你可以把它变成一个HashWithIndifferentAccess
,并且只需要转换值:
original = HashWithIndifferentAccess.new(original)
original.each { |key, value| original[key] = value.to_i }
String => Float
。如果类型是其他的话,它就不起作用 - 但这不是问题所在。 - Russell为了正确处理所有可能的键类型,如果你要进行转换,我建议这样操作:
h = {:a => 54.0, :b => 572.0, :c => 1045.0, :d => 'test', :e => 1.23 }
p(h.merge(h) do |k, v|
v = v.to_i if v.is_a?(Float) && v.to_i == v
v
end)