2014-01-28 3 views
0

У меня есть массив пользовательских объектов точкиКак удалить и вернуть пользовательский объект из рубинового массива

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

У меня есть массив точки объектов. Мне интересно, как я могу удалить из массива и вернуть в то же время точку с point.x равна 5?

Я пытался так:

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

где массив является контейнером

+0

Что вы хотите вернуть? массив? –

+0

@ArupRakshit Я хочу вернуть объект Point. Тот, который имеет x = 5. – user2128702

ответ

1

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

['Enumerable # find'] (http://ruby-doc.org/core-2.1.0/Enumerable.html#method-i-find) возвращает первый элемент. – Stefan

+0

вправо - я знал, что есть метод поиска, но быстрый google пропустил его - это на enuberable not array - thanks - обновит –

0

Что @Richard Джордан сказал правильно, поэтому вы не получаете то, что вы искали. Но я бы сделал, как показано ниже, с использованием Array#index и Array#delete_at:

array.delete_at(array.index { |point| point.x == 5 }) 
Смежные вопросы