【问题标题】:Finding the element of a Ruby array with the maximum value for a particular attribute查找具有特定属性最大值的 Ruby 数组的元素
【发布时间】:2011-11-07 16:00:03
【问题描述】:

这个问题可能有一个非常简单的答案,但我现在无法弄清楚。如果我有一个特定类型对象的 ruby​​ 数组,并且它们都有一个特定的字段,我如何找到该数组中具有该字段最大值的元素?

【问题讨论】:

标签: ruby


【解决方案1】:
array.max_by do |element|
  element.field
end

或者:

array.max_by(&:field)

【讨论】:

  • 查看 Enumerable 模块的文档以获得更多有用的方法。
【解决方案2】:

这有帮助吗?

my_array.max {|a,b| a.attr <=> b.attr }

(我假设您的字段名称为attr

【讨论】:

  • 是的,这正是我要找的,正在搜索 Array api 并找不到任何东西,忘记检查 api 的 Enumberable,谢谢!
  • 始终检查 Enumerable API。它有你需要的一切厨房水槽!
  • 我更喜欢使用max_by,因为它使用起来更简单:该块只接受一个参数,您不必显式使用太空飞船 (&lt;=&gt;) 运算符。
  • @DavidGrayson 感谢您提供的信息。我不知道这种方法的存在。我将对您的评论和回答进行投票。
【解决方案3】:

您也可以对数组进行排序,然后得到最大值、最小值、第二大值等。

array = array.sort_by {|k,v| v}.reverse

puts hash[0]["key"]

【讨论】:

  • 如果你只是追求最小值或最大值,算法是O(n)。最小排序为O(n log n)。除非需要,否则不要使用它,因为这会造成一些不必要的性能损失。
  • 是的。排序只是为了获得最大值而过度杀伤力。我添加了这个以防有人想要获得第二大、第三大等。
猜你喜欢
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多