我正在使用一个名为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
}
我的目标是去掉所有键末尾的“00:00:00+00”,得到如下哈希:
{
"2011-02-01" => 816,
"2011-01-01" => 58,
"2011-03-01" => 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
Map回my_hash
的键:
Hash[my_hash.map {|k,v| [parsed_keys[k], v]}]
但这会返回以下错误:
TypeError: can't convert String into Integer
如何将parsed_keys
Map回my_hash
的键?
5条答案
按热度按时间7bsow1i61#
你为什么不这么做呢
这给了你
i7uq4tfw2#
有一个新的“Rails方式”方法来完成这个任务:)
http://api.rubyonrails.org/classes/Hash.html#method-i-transform_keys
0vvn1miw3#
另一种备选方案可以是:
1.Map
1.返回已转换的两个元素数组[converted_key,converted_value]
1.转换回哈希
waxmsbnn4#
在iblue’s answer的基础上,当从每个字符串中删除时间时,您可以为
gsub
的模式使用regexp而不是字符串。例如:您可以改进regexp模式以处理不同的情况。
kpbpu0085#
使用Ruby标准库中的**
Hash#transform_keys
**:Hash#transform_keys
可用时该方法已添加到标准库in Ruby 2.5中,该库于2017-12-25发布。
Hash#transform_keys
也曾经在Active Support中定义,从Rails 4.0.1开始(2013-11-01发布)。Active Support在Rails 6.0中将该方法定义为removed,因为Rails 6.0依赖于Ruby 2.5。