2010-09-15 28 views
3

我正在使用以下邏輯根據條件更新列表項目。什麼是根據匹配條件替換數組元素的優雅方法?

def update_orders_list(order) 
    @orders.delete_if{|o| o.id == order.id} 
    @orders << order 
end 

理想情況下,我寧願這些方法:

array.find_and_replace(obj) { |o| conditon } 

OR

idx = array.find_index_of { |o| condition } 
array[idx] = obj 

有沒有更好的辦法?

回答

5

從1.8.7開始,Array#index接受一個塊。所以你的最後一個例子應該只需稍作調整即可正常工作。

idx = array.index { |o| condition } 
array[idx] = obj 
+0

我在Array文檔中找不到這個,因爲我在查看1.8.6文檔。謝謝。 – 2010-09-15 20:17:51

5
array.map { |o| if condition(o) then obj else o } 

也許?

+0

是的,這應該做到這一點。雖然'條件(o)? obj:o'可能會更標準一點。你甚至可以用'find_and_replace'方法來擴展'Array'類,使它像你的僞代碼一樣工作。 – 2010-09-15 18:03:48

+1

也許地圖!使其就地? – tokland 2010-09-15 19:17:55

相關問題