Ruby 数组 delete if 并获取删除的对象
Ruby array delete if and get deleted object
所以我有这种情况,我需要有条件地从数组中删除一些东西,这意味着我想遍历数组中的项目并进行测试并删除通过测试的项目,然后我想要取回已删除的项目。如果我排除了这个的条件方面,那么 Array#delete
基本上会做我想要的 - returns 删除的项目,但不能有条件地删除。另一方面,delete_if 有条件地删除项目,但 returns 剩余项目返回数组。
为了这个问题的目的,假设以下 class:
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?}
对于必须多次遍历数组才能完成此操作,我并不感到兴奋:/首先找到目标的索引,其次获取目标,第三次删除目标。恶心
有什么想法或建议吗?
你要的是partition方法:
deleted_items, kept_items = my_array.partition {|a| a.test?}
所以我有这种情况,我需要有条件地从数组中删除一些东西,这意味着我想遍历数组中的项目并进行测试并删除通过测试的项目,然后我想要取回已删除的项目。如果我排除了这个的条件方面,那么 Array#delete
基本上会做我想要的 - returns 删除的项目,但不能有条件地删除。另一方面,delete_if 有条件地删除项目,但 returns 剩余项目返回数组。
为了这个问题的目的,假设以下 class:
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?}
对于必须多次遍历数组才能完成此操作,我并不感到兴奋:/首先找到目标的索引,其次获取目标,第三次删除目标。恶心
有什么想法或建议吗?
你要的是partition方法:
deleted_items, kept_items = my_array.partition {|a| a.test?}