我正在使用名为 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;在所有钥匙的末尾。
答案 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}}