使用变量删除散列数组中的特定散列

时间:2015-03-26 00:19:38

标签: ruby-on-rails ruby

我有一系列像这样的哈希:

"[{:id=>15, :name=>"Hockey", :num_of_boxes=>2, :total_price=>6.98}, {:id=>14, :name=>"Baseball", :num_of_boxes=>3, :total_price=>8.97}, {:id=>5, :name=>"Basketball", :num_of_boxes=>2, :total_price=>5.98}]"

在我的控制器中,我想删除其中将ID设置为变量的哈希值。我该怎么做呢?

这是我试图开始工作的,我认为这是正确的道路?在此方法运行之前,将在控制器中设置id:

new_array = eval(@garden.seed_cart).reject { |h| id.include? h['15'] }

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

试试这个:

arr.delete_if { |hash| id.include?(hash[:id]) }

注意(与#reject建议的比较):如果没有要删除的内容,#delete_if将返回未更改的数组。 #reject返回nil。此外,#delete_if修改了数组,而#reject(没有!)只返回数组的更改版本,但保留原始数组。

修改 注意:此处使用include?假设可能有多个整数被过滤掉,即id(或ids)实际上是一个数组。如果您只需要过滤一个ID,则可以使用块内的hash[:id] == id进行直接比较。感谢smathy在评论中指出这一点。

答案 1 :(得分:0)

如果您有这些数据:

data = [{:id=>15, :name=>"Hockey", :num_of_boxes=>2, :total_price=>6.98}, {:id=>14, :name=>"Baseball", :num_of_boxes=>3, :total_price=>8.97}, {:id=>5, :name=>"Basketball", :num_of_boxes=>2, :total_price=>5.98}]

并且您想要从数据中删除此ID:

ids = [14,15]

你可以做到

new_array = data.reject { |h| ids.include? h[:id] }

你得到了

new_array = [{:id=>5, :name=>"Basketball", :num_of_boxes=>2, :total_price=>5.98}]

注意:数组中的data(不是字符串)和ids也是一个数组。