从Ruby中的哈希数组中删除哈希

我有一系列哈希如下:

[{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v3", "k2"=>"5.1%"}] 

现在,我想首先检查数组是否包含带有值为"v3""k1"的散列。 如果是,那么我想从数组中删除该哈希。

结果应该是:

 [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}] 

使用Array#delete_if

 arr = [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v3", "k2"=>"5.1%"}] arr.delete_if { |h| h["k1"] == "v3" } #=> [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}] 

如果没有匹配条件的哈希,则数组保持不变。

您可以使用Array#reject (如果您不想修改接收器)以及Array#reject! (如果要修改接收器)

 arr = [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v3", "k2"=>"5.1%"}] p arr.reject { |h| h["k1"] == "v3" } # >> [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}] arr = [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}, {"k1"=>"v3", "k2"=>"5.1%"}] p arr.reject! { |h| h["k1"] == "v3" } # >> [{"k1"=>"v1", "k2"=>"75.1%"}, {"k1"=>"v2", "k2"=>"-NA-"}]