我有一系列像这样的哈希:
"[{: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'] }
感谢您的帮助!
答案 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
也是一个数组。