在Ruby中从哈希数组中删除一个哈希

22

我有一个哈希数组如下:

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

现在,我想先检查数组中是否包含具有键"k1"和值"v3"的哈希表。如果是,则删除该哈希表。

结果应为:

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

62

使用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-"}]
如果没有符合条件的哈希值,数组将保持不变。

如果我想在else情况下执行某些操作,例如h["k1"] != "v3"。我们该怎么做? - Hellboy

15
你可以使用 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-"}]

我能用这个来拒绝多个数组元素吗? - harika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接