ReduceLeft与对矢量?

时间:2015-06-13 09:10:45

标签: scala

我有一对矢量

Lambda(:,1) = [randi([1,4], 4,1); randi([1,30],1)*rand];

我希望返回对中具有最大第一个元素的对。 我试过这样做:

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)

但是存在类型不匹配错误,我无法理解此代码的错误。

2 个答案:

答案 0 :(得分:4)

为什么要使用reduceLeft? 只是默认的max方法非常好用

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。

答案 1 :(得分:0)

max在此示例中效果很好。但是,如果您想知道如何使用reduceLeft来执行此操作,请执行以下操作:

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)