映射到哈希的键

时间:2012-07-16 13:26:21

标签: ruby-on-rails hashmap

我正在使用名为 my_hash 的哈希:

{"2011-02-01 00:00:00+00"=>816, "2011-01-01 00:00:00+00"=>58, "2011-03-01 00:00:00+00"=>241}

首先,我尝试解析 my_hash 中的所有键(有时)。

my_hash.keys.sort.each do |key|
  parsed_keys << Date.parse(key).to_s
end 

这给了我这个:

["2011-01-01", "2011-02-01", "2011-03-01"]

然后,我尝试将 parsed_keys 映射回 my_hash 的键:

Hash[my_hash.map {|k,v| [parsed_keys[k], v]}]

但是会返回以下错误:

TypeError: can't convert String into Integer

如何将 parsed_keys 映射回 my_hash 的键?

我的目标是摆脱&#34; 00:00:00 + 00&#34;在所有钥匙的末尾。

4 个答案:

答案 0 :(得分:20)

你为什么不这样做?

my_hash.map{|k,v| {k.gsub(" 00:00:00+00","") => v}}.reduce(:merge)

这会给你

{"2011-02-01"=>816, "2011-01-01"=>58, "2011-03-01"=>241}

答案 1 :(得分:6)

有一种新的&#34; Rails方式&#34;此任务的方法:)

http://api.rubyonrails.org/classes/Hash.html#method-i-transform_keys

答案 2 :(得分:3)

使用 iblue 回答,您可以使用正则表达式来处理这种情况,例如:

pattern = /00:00:00(\+00)+/
my_hash.map{|k,v| {k.gsub(pattern,"") => v}}.reduce(:merge)

您可以改进模式以处理不同的情况。

希望它有所帮助。

编辑:

抱歉, iblue 已经发布了答案

答案 3 :(得分:0)

另一种选择可能是:

  1. 地图
  2. 返回转换后的两个元素数组[converted_key,converted_value]
  3. 转换回散列
{{1}}