我有一对矢量
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)
但是存在类型不匹配错误,我无法理解此代码的错误。
答案 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)