按ruby中的值分组哈希值

我在ruby中有一个哈希,看起来像这样:

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

我试图寻找一个解决方案,可以将这个散列切换为两个部分,一个值为1,另一个散列值为0。

您可以按其值对哈希进行分组:

 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" } h2 = h1.group_by{|k,v| v} 

它将生成一个按其值分组的哈希,如下所示:

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

如果你想要一个数组作为答案,最干净的解决方案是分区方法。

 zeros, ones = my_hash.partition{|key, val| val == '0'} 

Just Hash.select

 h1.select { |key, value| value == '0' } #=> {"users_milestones"=>"0", "users_goals"=>"0", ...} h1.select { |key, value| value == '1' } #=> {"admin_milestones"=>"1", "admin_goals"=>"1", ...} 

返回值取决于您的Ruby版本。 Ruby 1.8返回一个数组数组,而Ruby 1.9返回一个哈希,如上例所示。