簡體   English   中英

哈希中每個鍵/值對的ruby

[英]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 }

信任積分FP值

為了正確處理所有可能的鍵類型,如果你要轉換它我會建議像:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM