如何根据多个值删除哈希值

jis*_*ssy 0 ruby hash ruby-on-rails

我有以下列表:

hash_list = 
{ "a"=>{"unit_id"=>"43", "dep_id"=>"153","_destroy"=>"false"},
  "b"=>{"unit_id"=>"43", "dep_id"=>"153", "_destroy"=>"1"},
  "c"=>{"unit_id"=>"43", "dep_id"=>"154", "_destroy"=>"false"},
  "d"=>{"unit_id"=>"42", "dep_id"=>"154", "_destroy"=>"false"}
}
Run Code Online (Sandbox Code Playgroud)

我需要结果如下:

{
 "a"=>{"unit_id"=>"43", "dep_id"=>"153", "_destroy"=>"false"},
 "b"=>{"unit_id"=>"43", "dep_id"=>"153", "_destroy"=>"1"},
 "d"=>{"unit_id"=>"42", "dep_id"=>"154", "_destroy"=>"false"}
}
Run Code Online (Sandbox Code Playgroud)

基本上,不unit_id应该重复.但是,所有_destroy=="1"条目都可以出现在列表中.

请帮忙.

Gag*_*ami 5

试试这个:

> hash_list.to_a.uniq{|_,v|v["unit_id"] unless v["_destroy"] == "1"}.to_h

#=> {
      "a"=>{"unit_id"=>"43", "dep_id"=>"153", "_destroy"=>"false"},
      "b"=>{"unit_id"=>"43", "dep_id"=>"153", "_destroy"=>"1"},
      "d"=>{"unit_id"=>"42", "dep_id"=>"154", "_destroy"=>"false"}
    }
Run Code Online (Sandbox Code Playgroud)

这将检查为unit_iduniq,并且还会出现"_destory" == "1"您提到的条目.