2015-05-19 3 views
-4

У меня есть простой хэш, который выглядит как это:Преобразование Hash с Рубином

{"12"=>[1], "10"=>[1], "2"=>[1], "11"=>[1]} 

ключа равно имя пользователя и значение равно пользователя подписчики идентификаторы. Теперь я хочу, чтобы преобразовать этот хэш, чтобы вернуть мне данные, такие как следующие:

{"User 12"=>[Follower name], "User 10"=>[Follower name], "User 2"=>[Follower name], "User 11"=>[Follower name]} 

Что будет лучший способ сделать это, чтобы в Ruby?

+1

И откуда взялись имена? –

+0

Когда вы хотите получить имя подписчика: Follower.find (id) .name. Но это не важно. Я только ищу пример, и я буду обращаться к моим потребностям. –

+0

Должны ли ключи тоже быть подняты? Вы пишете, что «ключ равен имени пользователя», но в вашем примере, похоже, это не так. –

ответ

2

Попробуйте это:

hash = {"12"=>[1], "10"=>[1], "2"=>[1], "11"=>[1]} 
hash.each_with_object({}) do |(user_id, follower_ids), hash| 
    hash[User.find(user_id).name] = follower_ids.map { |follower_id| Follower.find(follower_id).name } 
end 

Я использовал User и Follower как ActiveRecord классов, но это зависит от вашей настройки.

-1

Вы можете сделать что-то вроде этого:

res = {} 
hash = {"12"=>[1], "10"=>[1], "2"=>[1], "11"=>[1]} 
hash.each{ |k,v| res["User #{k}"] = Follower.find(v.first).name } 
res 
# => {"User 12"=>Follower name, "User 10"=>Follower name, "User 2"=>Follower name, "User 11"=>Follower name} 
1

Это превратит ваш хэш в месте:

hash.values.each { | ids | ids.map! { | id | ... code to transform id to name ... } } 
Смежные вопросы