我有一系列自定义对象点
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})
其中数组是容器
答案 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#index
和Array#delete_at
:
array.delete_at(array.index { |point| point.x == 5 })