将最小值和最大值添加到PORO数组中

时间:2014-05-12 07:57:11

标签: ruby

如何将minmax方法添加到PORO数组中?

我有一个名为Sensor

的班级
class Sensor 
 ...
end

我希望,给定一系列传感器,能够发送消息minmax以根据2种不同的自定义方法检索我认为最小和最大的内容。

我想我必须覆盖一些方法(就像我需要排序时那样),但我可以找到有关它的信息。

感谢。

2 个答案:

答案 0 :(得分:1)

您最有可能想要使用Comparable模块:

class Sensor
  include Comparable

  def <=>(other)
    # Comparison logic here.
    # Returns -1 if self is smaller then other
    # Return 1 if self is bigger then other
    # Return 0 when self and other are equal
  end
end

完成此操作后,您可以将传感器与><<=等运营商进行比较。您还可以对这些对象的数组进行排序,并使用maxmin方法。

class A
  attr_accessor :a

  include Comparable

  def initialize(a)
    @a = a
  end

  def <=>(other)
    self.a <=> other.a
  end
end

ary = [3,6,2,4,1].map{|a| A.new(a) }
ary.max       #=> #<A:0x000000027abc30 @a=6>

答案 1 :(得分:0)

您可以使用max_by and min_by方法

array_of_objects.max_by { |x| x.custom_method_in_object }

例如

> ["a", "bb", "ccc"].max_by {|word| word.length } 
# => "ccc"

因此,如果您在min课程中定义了maxSensor方法,则可以致电

array_of_sensors.max_by {|s| s.max } # Min can be done similarly

或使用shorcut

array_of_sensors.max_by &:max