从Array中删除并返回Ruby中已删除的元素

如何从数组中删除一些元素并选择它们?

例如:

class Foo def initialize @a = [1,2,3,4,5,6,7,8,9] end def get_a return @a end end foo = Foo.new b = foo.get_a.sth{ |e| e  [1,2,3] p foo.get_a # => [4,5,6,7,8,9,10] 

我可以用什么而不是foo.get_a.sth

如果您不需要保留以下对象ID:

 a = [1,2,3,4,5,6,7,8,9,10] b, a = a.partition{|e| e < 4} b # => [1, 2, 3] a # => [4, 5, 6, 7, 8, 9, 10] 

如果确实需要保留a的对象id,则使用时间数组c

 a = [1,2,3,4,5,6,7,8,9,10] b, c = a.partition{|e| e < 4} a.replace(c) 

如果您只删除一个项目,则不需要复制数组等:

 array = [{ id: 1 }, { id: 2 }, {id: 3 }] array.delete_at(array.find_index { |element| element[:id] == 1 }) #=> {:id=>1} 
 a = [1, 2, 3, 4] a.dup - (a.delete_if(&:even?)) #=> [2, 4] a #=> [1, 3] a = [1, 2, 3, 4] b = a.dup - (a.delete_if { |e| e < 4 }) a #=> [4] b #=> [1, 2, 3] 

编辑:听起来好像你刚刚#select

 a = [1, 2, 3, 4] a.select { |e| e < 3 } #=> [1, 2] 

我仍然不相信ruby在其默认库中没有这方面的东西。 应该有#drop方法等效于此。 当然有一个可用的gem可以为数组类添加function。 但是,当你可以打破自己的脚本时,谁需要gem:

 #in initializer somewhere class Array def exclude(obj) x = self x.delete(obj) x end end 

我可以向ruby github项目提交一个pull请求来获取此方法。 到目前为止,这个超人补丁非常有效。