是否有快速的Ruby或Rails方法根据块中提供的条件从Array中删除元素然后返回该元素?
让我们说,给定:
e1.good? # false
e2.good? # true
e3.good? # true
a = [e1, e2, e3]
是否有方法delete_and_return_if执行此操作:
a.delete_and_return_if { |e| e.good? } # delete e2 from a and returns e2
[e1].delete_and_return_if { |e| e.good? } # returns nil
或者至少有一种干净的方法可以做到这一点吗?
答案 0 :(得分:1)
有delete_if,这是一个Ruby函数。 http://www.ruby-doc.org/core-1.9.3/Array.html
答案 1 :(得分:1)
这将更新数组并返回已删除的条目:
a = [1, 2, 3]
p a
# => [1, 2, 3]
deleted = a.delete a.detect {|e| e == 2 }
p deleted
# => 2
p a
# => [1, 3]
所以你可以这样做:
a.delete a.detect(&:good?)
更新:感谢@oldergod让我回想起detect
答案 2 :(得分:1)
如果您没有重复项或要删除所有相同的元素,则可以执行
a.delete(a.detect(&:good?))
a.detect(&:good?)
将返回第一个good?
对象或nil
if
空无一人。 a.delete(elem)
将删除并返回您的元素。或者,如果您有重复项,只想删除第一个:
a.delete(a.index(a.detect(&:good?)))
答案 3 :(得分:0)
a = [e1, e2, e3]
a.delete_if{|e|!e.good?}
it will delete e1. and returns e2 and e3