按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返回一个哈希,如上例所示。