[英]ruby for each key/value pair in a hash
我對MongoDB有一點問題,它返回帶有雙引號和整數的鍵的哈希值一直是浮點數,這對其他人來說是個問題嗎?
例如,在地圖縮小或分組之后,請說我有一堆看似如下的哈希:
{"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 }
為了正確處理所有可能的鍵類型,如果你要轉換它我會建議像:
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)
上面的代碼將在散列中轉換Float值,這些散列實際上是Integer的整數。
但實際上你根本不需要這樣做。 雖然不信任浮點格式是常見的,但事實證明它們確實代表了整數值。
你可以相信,這是數據庫中的一個整數的任何值將比較准確地與整型常量(包括0),你將不會看到任何四舍五入文物。
當然,如果你將一個浮點除以一個因子以外的東西,你會注意到一個區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.