Подтвердить что ты не робот

Методы массива Ruby для определения местоположения на основе атрибута объекта?

Скажем, у меня есть класс 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). Я предполагаю, что это означает, что он не возвращает индекс вообще.

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

4b9b3361

Ответ 1

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

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

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