基于匹配条件替换数组元素的优雅方法是什么?

Har*_*tty 3 ruby ruby-on-rails

我使用以下逻辑来根据条件更新列表项.

def update_orders_list(order)
  @orders.delete_if{|o| o.id == order.id}
  @orders << order
end
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会更喜欢这些方法:

array.find_and_replace(obj) { |o| conditon }
Run Code Online (Sandbox Code Playgroud)

要么

idx = array.find_index_of { |o| condition }
array[idx] = obj
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

vla*_*que 5

array.map { |o| if condition(o) then obj else o }
Run Code Online (Sandbox Code Playgroud)

也许?

  • 也许地图!使它就位? (2认同)

tho*_*ncp 5

从1.8.7开始,Array#index接受一个块.所以你的最后一个例子应该可以很好地进行一些小调整.

idx = array.index { |o| condition }
array[idx] = obj
Run Code Online (Sandbox Code Playgroud)