2016-07-11 118 views
0

所以我有這種情況下,我需要從數組中刪除某些條件,這意味着我想通過數組中的項目,並做一個測試,並刪除通過測試,然後我想讓這個被刪除的項目回來。如果我排除這個條件方面然後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?} 

我不需要多次通過數組才能完成這個任務: /首先找到目標的索引,第二個找到目標,第三個去除目標。伊克。

任何想法或建議?

+0

我還是不明白你問 – niceman

+0

我不知道如何澄清。我想知道在數組或Ruby 2.3中的其他地方是否有方法可以有條件地從數組中移除對象並返回移除的對象。當delete_if工作時,它返回剩餘(未刪除)對象的數組,並且刪除的對象消失在以太網中。 – jaydel

+1

雖然不如'分區','[3,1,4] .group_by {| n | n> 2} .values#=> [[3,4],[1]]'也適用,只要排序不是問題。 –

回答

2

你想要什麼partition方法:

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

完美!謝謝。當我一次一個地使用Array方法時,我完全錯過了那個:/ – jaydel