2014-02-20 48 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"}] 

更新

这将是非常好,如果我能得到这个结构:

{ 
    "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"] } 

输出:(如@mdesantis提到

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

更新,你的预期输出是不正确的,所以我没有改变结构到有意义的东西。

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

相关问题