如何将min
和max
方法添加到PORO数组中?
我有一个名为Sensor
class Sensor
...
end
我希望,给定一系列传感器,能够发送消息min
和max
以根据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
完成此操作后,您可以将传感器与>
,<
,<=
等运营商进行比较。您还可以对这些对象的数组进行排序,并使用max
和min
方法。
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
课程中定义了max
和Sensor
方法,则可以致电
array_of_sensors.max_by {|s| s.max } # Min can be done similarly
或使用shorcut
array_of_sensors.max_by &:max