2015-06-13 46 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)