Ruby массив методов для определения местоположения на основе атрибута объекта? - PullRequest
16 голосов
/ 05 ноября 2011

Скажем, у меня есть класс Ruby, Flight.Flight имеет attr_accessor :key на нем.Если есть массив экземпляров этого класса: flights = [flight1, flight2, flight3], у меня есть «целевой ключ», скажем «2jf345», и я хочу найти полет на основе его ключа из этого массива - какой код мне следует использовать?

Это код, который я собирался использовать:

flights[flights.map { |s| s.key }.index(target_key)]

Но, похоже, в Ruby должен быть более простой способ.Кроме того, код выше возвращает ошибку для меня - `[]': no implicit conversion from nil to integer (TypeError).Я предполагаю, что это означает, что он вообще не возвращает индекс.

Спасибо за любую помощь.

1 Ответ

30 голосов
/ 05 ноября 2011

Вы можете просто использовать find, чтобы получить объект Flight, вместо того, чтобы пытаться использовать index для получения индекса:

flights.find {|s| s.key == target_key }

Однако ваше сообщение об ошибке предполагает, что index(target_key) возвращает nil, что означает, что у вас на самом деле нет рейса с ключом, который вы ищете, а это значит, что find также вернет nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...