通过检查元组元素来减少

时间:2016-11-04 09:49:22

标签: scala

我想找到具有最大第二元素的元组:

mylist.reduce { (x, y) => {
  if (y._1 > x._1) y
  else x
}}

其中xy的类型为Tuple3[DenseVector[Int], Double, PipelineModel]

  1. 我收到>无法解决的错误。那是怎么回事?使用foldLeft并提供零元素也无济于事。

  2. 我可以更好地编写代码吗? (我觉得它看起来不太好。)

1 个答案:

答案 0 :(得分:2)

在三元组中(a,b,c)triplet._2为您提供第二个元素。

_1给出第一个元素

_2给出第二个元素

_3给出第三个元素

  

元组不是零基础。

scala> val triplet = (1, 2, 3)
triplet: (Int, Int, Int) = (1,2,3)

scala> triplet._1
res0: Int = 1

scala> triplet._2
res1: Int = 2

scala> triplet._3
res2: Int = 3

回答1:

在您的情况下,triplet._1给出了三元组(tuple3)的第一个元素,即DenseVector[Int]元素,您无法使用>。这就是>未解决的原因。

回答2:

maxBy

l.maxBy(_._2)

Scala REPL

scala> val l = List((1, 2, 3), (0, 0, 1))
l: List[(Int, Int, Int)] = List((1,2,3), (0,0,1))

scala> l.maxBy(_._2)
res1: (Int, Int, Int) = (1,2,3)

减少

l.reduce { (x, y) =>  if (x._2 > y._2) x else y }

Scala REPL

scala> val l = List((1, 2, 3), (0, 0, 1))
l: List[(Int, Int, Int)] = List((1,2,3), (0,0,1))

scala> l.reduce { (x, y) =>  if (x._2 > y._2) x else y }
res3: (Int, Int, Int) = (1,2,3)