Ruby数组删除if和get delete对象

所以我有这种情况,我需要有条件地从数组中删除一些东西,这意味着我想要遍历数组中的项目并进行测试并删除通过测试的那个,然后我想要删除该项目背部。 如果我排除了这个条件方面,那么Array#delete基本上做了我想要的 – 返回已删除的项目,但不能有条件地删除。 另一方面,delete_if有条件地删除该项,但返回数组中的其余项。

出于此问题的目的,假设以下类:

 class Foo def test? #returns true or false end end 

我可以通过以下方式轻松重现此行为:

 index = my_array.index {|a| a.test?} item_to_delete = my_array[index] my_array.delete item_to_delete 

但我希望找到类似的东西:

 deleted_item = my_array.delete_if_and_return_deleted {|a| a.test?} 

我不是很高兴不得不多次完成数组才能完成这个任务:/首先找到目标的索引,第二个找到目标,第三个去除目标。 伊克。

有什么想法或建议吗?

你想要的是分区方法:

 deleted_items, kept_items = my_array.partition {|a| a.test?}