Методы массива 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)
. Я предполагаю, что это означает, что он не возвращает индекс вообще.
Спасибо за любую помощь.
Ответы
Ответ 1
Вы можете просто использовать find
, чтобы получить объект Flight, вместо того, чтобы пытаться использовать index
для получения индекса:
flights.find {|s| s.key == target_key }
Однако ваше сообщение об ошибке подсказывает, что index(target_key)
возвращает nil
, что означает, что на самом деле у вас нет полета с ключом, который вы ищете, а это означает, что find
вернет nil
.