sergeda
sergeda

Reputation: 369

ReduceLeft with Vector of pairs?

I have a Vector of Pairs

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

and I want to return pair with maximum first element in pair. I've tried it to do like this:

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

and

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

but there is type mismatch error and I can't understand what is wrong with this code.

Upvotes: 0

Views: 337

Answers (2)

marios
marios

Reputation: 8996

max works great in this example. However, if you are wondering how to do this using reduceLeft here it is:

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)

Upvotes: 0

volia17
volia17

Reputation: 938

Why using reduceLeft ? Just the default max method works very well

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)

If you want reduceLeft instead :

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

Your error is you have to return a tuple, not an int

y._1 max z._1

The max function here on two int return an int.

Upvotes: 4

Related Questions