Group Hash by values in ruby

后端 未结 5 1217
广开言路
广开言路 2021-01-11 10:49

I have a hash in ruby which looks something like this:

{
  \"admin_milestones\"=>\"1\",
  \"users_milestones\"=>\"0\",
  \"admin_goals\"=>\"1\",
  \         


        
5条回答
  •  长发绾君心
    2021-01-11 11:21

    You should use group_by on the keys arrays and use the value as the grouping element:

    h1 = {
      "admin_milestones"=>"1",
      "users_milestones"=>"0",
      "admin_goals"=>"1",
      "users_goals"=>"0", 
      "admin_tasks"=>"1", 
      "users_tasks"=>"0",
      "admin_messages"=>"1",
      "users_messages"=>"0",
      "admin_meetings"=>"1",
      "users_meetings"=>"0"
    }
    
    # group_by on the keys, then use the value from the hash as bucket
    h2 = h1.keys.group_by { |k| h1[k] }
    
    puts h2.inspect
    

    Returns a hash from value to array of keys:

    {
        "1" => [
            [0] "admin_milestones",
            [1] "admin_goals",
            [2] "admin_tasks",
            [3] "admin_messages",
            [4] "admin_meetings"
        ],
        "0" => [
            [0] "users_milestones",
            [1] "users_goals",
            [2] "users_tasks",
            [3] "users_messages",
            [4] "users_meetings"
        ]
    }
    

提交回复
热议问题