ruby如何从哈希数组中删除元素?

时间:2016-08-09 22:28:28

标签: arrays ruby hash hashmap

我正在尝试从示例中删除idname以及001的整行:

002

我尝试过以下操作,但似乎无效:

sample = [{"id"=>"000", "name"=>"Bob"}, {"id"=>"001", "name"=>"Sally"}, {"id"=>"002", "name"=>"Spike"}, {"id"=>"003", "name"=>"Junior"}, {"id"=>"004", "name"=>"Tater"}] remove_ele = ["001","002"]

基本上,我正在尝试比较sample.delete_if { |key, value| sample[x]["id"] == remove_ele[x] }中的2和任何匹配,它只会删除remove_ele中的整个行/元素。

请以红宝石的方式协助以最佳方式执行此操作。

2 个答案:

答案 0 :(得分:4)

您已向delete_if提供此块的问题:

sample.delete_if { |key, value| sample[x]["id"] == remove_ele[x] }

由于sample是一个哈希数组,因此使用delete_if迭代器会将哈希传递给块。即它应该是|hash|而不是|key, value|

其次,您的区块中不会定义x

功能性解决方案是:

remove_ele.each do |id_to_remove|
  sample.delete_if { |hash| hash['id'] == id_to_remove }
end

或者,它做同样的事情:

sample.delete_if { |hash| remove_ele.include? hash['id'] }

答案 1 :(得分:1)

sample.delete_if {|x| remove_ele.include? x['id'] }