首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分组散列?

如何分组散列?
EN

Stack Overflow用户
提问于 2014-02-20 10:18:35
回答 1查看 49关注 0票数 0

我有一个散列(见下面),我需要分组,但我不知道如何做。我将在iOS (Rubymotion)中的表节中使用这个数组。

散列如下所示,我想按行业分组:

代码语言:javascript
复制
[{"firstname" => "John", "lastname" => "Wayne", "profession" => "actor"},{"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"},{"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"}]

我需要它看起来像这样:

代码语言:javascript
复制
["actor" => [{"firstname" => "John", "lastname" => "Wayne", "profession" => "actor"},{"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"}], "director" =>[{"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"}]

更新

如果我能得到这个结构,那就太好了:

代码语言:javascript
复制
{
    "profession" => "actor",
    "people" =>
    [
      {"firstname"=>"John", "lastname"=>"Wayne", "profession"=>"actor"},
      {"firstname" => "Oliva", "lastname" => "Newton", "profession" => "actor"}
    ],
"profession" => "director",
    "people" =>
    [
      {"firstname" => "Terry", "lastname" => "Gilliam", "profession" => "director"}
    ]
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-20 10:22:23

使用Enumerable#group_by如下所示:

代码语言:javascript
复制
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"] }

输出:

代码语言:javascript
复制
{  "actor"=> [
             {"firstname"=>"John", "lastname"=>"Wayne", "profession"=>"actor"}, 
             {"firstname"=>"Oliva", "lastname"=>"Newton", "profession"=>"actor"}
            ], 
    "director"=> [
             {"firstname"=>"Terry", "lastname"=>"Gilliam", "profession"=>"director"}
                 ]
}

update (正如@mdesantis 所提到的,您的预期输出不是正确的,所以我确实将结构更改为有意义的内容。

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
[
    {"profession"=>"actor", 
    "people"=> [ {"firstname"=>"John", "lastname"=>"Wayne", "profession"=>"actor"},
                 {"firstname"=>"Oliva", "lastname"=>"Newton", "profession" =>"actor"}
                ]
    },
    {"profession"=>"director",
    "people"=>[ {"firstname"=>"Terry", "lastname"=>"Gilliam", "profession"=>"director"}
              ]
    }
]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21904737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档