如何找到对象序列中的查找最大值?

时间:2015-06-03 18:31:16

标签: scala

我想使用Scala方法zip和max找到一个具有max int值的对象。例如,我有一个带有嵌套对象的复杂对象。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: addinfourl instance has no attribute '__exit__'

1 个答案:

答案 0 :(得分:5)

您可以在序列上使用maxBy。例如(轻轻编辑以便它可以编译):

case class B(value: Int, prop1: String)
case class A(prop1: String, b: B, prop2: String)

val as = Seq(
  A("", B(10, ""), ""),
  A("foo", B(1, "bar"), "qux"),
  A("John", B(3, "Mary"), "Bob")
)

然后:

scala> as.maxBy(_.b.value)
res0: A = A(,B(10,),)

maxBy的参数只是从A到编译器可以告诉如何排序的函数(更具体地说是Ordering实例的任何东西)。编译器知道如何比较整数,所以我们可以使用_.b.value,这是像(a: A) => a.b.value这样的糖。

您还可以为Ordering提供A个实例,并使用max

scala> implicit val orderingA: Ordering[A] = Ordering.by(_.b.value)
orderingA: Ordering[A] = scala.math.Ordering$$anon$9@3341afc6

scala> as.max
res1: A = A(,B(10,),)

maxBy可能更适合一次性操作。