2015-06-13 22 views
0

我有双ReduceLeft with Vector of pairs?

Vector((9,1), (16,2), (21,3), (24,4), (25,5), (24,6), (21,7), (16,8), (9,9), (0,10)) 

的载体,我想在对最大的第一要素返回对。 我试过它这样做:

data reduceLeft[(Int, Int)]((y:(Int, Int),z:(Int,Int))=>y._1 max z._1) 

data reduceLeft((y:(Int, Int),z:(Int,Int))=>y._1 max z._1) 

但类型不匹配的错误,我不明白什么是错的这个代码。

+0

可能重复(http://stackoverflow.com/questions/15769366/如何找到的-MAX-IN-A-列表的元组) – lmcphers

回答

4

为什么使用reduceLeft? 只是默认最大值方法效果非常好

scala> val v = Vector((9,1), (16,2), (21,3), (24,4), (25,5), (24,6), (21,7), (16,8), (9,9), (0,10)) 
v: scala.collection.immutable.Vector[(Int, Int)] = Vector((9,1), (16,2), (21,3), (24,4), (25,5), (24,6), (21,7), (16,8), (9,9), (0,10)) 

scala> v.max 
res1: (Int, Int) = (25,5) 

如果你想reduceLeft代替:

v.reduceLeft((x, y) => if (x._1 >= y._1) x else y) 

你的错误是你必须返回一个元组,而不是一个int

y._1 max z._1 

的两个int的max函数返回一个int。

0

max在这个例子中很有效。但是,如果你想知道如何做到这一点使用reduceLeft在这里它是:?如何在一个元组的列表中找到MAX]

val v = Vector((9,1), (16,2), (21,3), (24,4), (25,5), (24,6), (21,7), (16,8), (9,9), (0,10)) 
v.reduceLeft((x:(Int, Int), y:(Int,Int)) => if(y._1 > x._1) y else x)