假设我有一个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)
。我认为这意味着它根本没有返回索引。
感谢您的帮助。
答案 0 :(得分:30)
您可以使用find
获取Flight对象,而不是尝试使用index
来获取索引:
flights.find {|s| s.key == target_key }
但是,您的错误消息表明index(target_key)
会返回nil
,这意味着您实际上没有带有您正在寻找的密钥的航班,这意味着find
将会也可以返回nil
。