【问题标题】:Ruby array methods for locating based on an object's attribute?基于对象属性定位的Ruby数组方法?
【发布时间】:2011-11-05 00:44:26
【问题描述】:

假设我有一个 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)。我认为这意味着它根本没有返回索引。

感谢您的帮助。

【问题讨论】:

  • 我几天前回答了一个非常相似的question

标签: ruby arrays syntax


【解决方案1】:

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

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

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

【讨论】:

  • 愚蠢的问题,但是docs中没有显示该方法是否有原因?
  • @Walter:它在 Enumerable 的文档中,而不是 Array,因为它是从那里继承的(mapselectinject 和大多数其他重要的高阶方法也是如此) .
  • 感谢帮助,今天感觉有点慢哈哈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多