用于根据对象属性定位的Ruby数组方法?

时间:2011-11-05 00:44:26

标签: ruby arrays syntax

假设我有一个Ruby类FlightFlight上有一个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 个答案:

答案 0 :(得分:30)

您可以使用find获取Flight对象,而不是尝试使用index来获取索引:

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

但是,您的错误消息表明index(target_key)会返回nil,这意味着您实际上没有带有您正在寻找的密钥的航班,这意味着find将会也可以返回nil