红宝石如何从哈希数组中删除元素?

adb*_*ads 1 ruby arrays hash hashmap

我想删除整个一行id,并name为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"]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下方法,但似乎不起作用:

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

本质上,我正在尝试比较2和其中的任何匹配项,remove_ele只会删除中的整个行/元素sample。

请以最佳方式协助您完成红宝石的制作。

max*_*ner 5

您提供给此代码块有一些问题delete_if:

sample.delete_if { |key, value| sample[x]["id"] == remove_ele[x] }
Run Code Online (Sandbox Code Playgroud)

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

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

一个有效的解决方案是:

remove_ele.each do |id_to_remove|
  sample.delete_if { |hash| hash['id'] == id_to_remove }
end
Run Code Online (Sandbox Code Playgroud)

另外,它做同样的事情:

sample.delete_if { |hash| remove_ele.include? hash['id'] }
Run Code Online (Sandbox Code Playgroud)