2014-02-20 5 views
0

У меня есть хэш (см. Ниже), который мне нужно сгруппировать, но я понятия не имею, как это сделать. Я буду использовать этот массив для разделов таблицы в iOS (Rubymotion).Как сгруппировать хэш?

Хэш выглядит следующим образом, и я хочу, чтобы группа по профессии:

[{"firstname" => "John", "lastname" => "Wayne", "profession" => "actor"},{"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"},{"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"}] 

Мне это нужно, чтобы выглядеть следующим образом:

["actor" => [{"firstname" => "John", "lastname" => "Wayne", "profession" => "actor"},{"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"}], "director" =>[{"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"}] 

Update

Было бы очень хорошо, если бы я мог получить эту структуру:

{ 
    "profession" => "actor", 
    "people" => 
    [ 
     {"firstname"=>"John", "lastname"=>"Wayne", "profession"=>"actor"}, 
     {"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"} 
    ], 
"profession" => "director", 
    "people" => 
    [ 
     {"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"} 
    ] 
    } 
+2

Вы вход имеет неправильную структуру –

+0

Обновленной структура еще хуже. – sawa

+0

Вы не можете иметь эту структуру, ключ '" people "не может присутствовать более одного раза в одном и том же хеше – mdesantis

ответ

3

проделайте ниже с использованием Enumerable#group_by:

a = [ 
     {"firstname" => "John", "lastname" => "Wayne", "profession" => "actor"}, 
     {"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"}, 
     {"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"} 
    ] 

a.group_by { |h| h["profession"] } 

выход:

{ "actor"=> [ 
      {"firstname"=>"John", "lastname"=>"Wayne", "profession"=>"actor"}, 
      {"firstname"=>"Oliva", "lastname"=>"Newton", "profession"=>"actor"} 
      ], 
    "director"=> [ 
      {"firstname"=>"Terry", "lastname"=>"Gilliam", "profession"=>"director"} 
       ] 
} 

обновление (Как @mdesantis упоминалось, ваш ожидаемый результат не правильный, так что я изменить структура к чему-то значимому.

a = [ 
     {"firstname" => "John", "lastname" => "Wayne", "profession" => "actor"}, 
     {"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"}, 
     {"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"} 
    ] 

result_hash = a.group_by { |h| h["profession"] }.map do |key,val| 
    {"profession" => key, "people" => val} 
end 

p result_hash 

выхода

[ 
    {"profession"=>"actor", 
    "people"=> [ {"firstname"=>"John", "lastname"=>"Wayne", "profession"=>"actor"}, 
       {"firstname"=>"Oliva", "lastname"=>"Newton", "profession" =>"actor"} 
       ] 
    }, 
    {"profession"=>"director", 
    "people"=>[ {"firstname"=>"Terry", "lastname"=>"Gilliam", "profession"=>"director"} 
       ] 
    } 
] 
+0

Спасибо! Я немного обновил свой вопрос. Пожалуйста, смотрите. –

+0

@JonathanClark Пожалуйста, проверьте. –

+0

@ArupRakshit Он решил игнорировать вас. – sawa

Смежные вопросы