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