Сопоставление с ключами хэша

Я работаю с хэшем под названием 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

как я могу map parsed_keys обратно ключи my_hash ?

моя цель состоит в том, чтобы избавиться от "00:00:00+00" в конце всех ключей.

3 ответов


почему бы тебе просто не сделать это?

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}

для этой задачи есть новые методы "Rails way":)

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


С помощью iblue ответ, вы можете использовать регулярное выражение для обработки этой ситуации, например:

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

вы можете улучшить шаблон для обработки различных ситуаций.

надеюсь, что это помогает.

изменить:

к сожалению, iblue уже написал ответ!--4-->