如何从ruby数组中删除并返回自定义对象

时间:2014-01-28 21:04:24

标签: ruby arrays select filter lambda

我有一系列自定义对象

class Point
  attr_accessor :x, :y
  def initialize x_coord, y_coord
    @x, @y = x_coord, y_coord
  end
end

我有一个 Point 对象数组。我想知道如何从数组中删除并同时返回 point.x 等于5的点?

我试过这样:

array.delete(array.select {|point| point.x == 5})

其中数组是容器

2 个答案:

答案 0 :(得分:2)

Array#select返回一个数组,而不是一个点。

所以如果只有一点,或者你关心第一场比赛就这样做:

array.delete(array.select {|point| point.x == 5}.first )

甚至更好,正如@Stefan在评论中所说:

array.delete(array.find { |point| point.x ==5 })

这涉及对代码的最小更改。

我也可能会重构,以便您以后可以换出匹配规则:

def get_and_remove_point(array)
  array.delete match_in(array)
end

def match_in(array)
  array.find { |point| point.x == 5 }
end

答案 1 :(得分:0)

@Richard Jordan 说的是正确的,这就是为什么你没有得到你想要的东西。但我会使用Array#indexArray#delete_at

执行以下操作
array.delete_at(array.index { |point| point.x == 5 })