您可能希望使用递归函数来比较 fp 样式中的每个元素,该样式在点处递归计算总和。
另一种方法(在 scala 中)是将它们压缩在一起并比较每一行元素。
例子:
def getScores(score1: List[Int], score2: List[Int]) = {
val scoresComapred = score1.zip(score2).map {
case (s1, s2) if s1 > s2 => (1, 0)
case (s1, s2) if s1 == s2 => (0, 0)
case (s1, s2) if s2 > s1 => (0, 1)
}
val (finalScore1, finalScore2) =
scoresComapred.foldLeft((0, 0)) { (a, b) => (a._1 + b._1, a._2 + b._2) }
List(finalScore1, finalScore2)
}
val score1 = List(1, 2, 3, 4, 7, 9, 10)
val score2 = List(0, 1, 2, 1, 1, 4)
println(getScores(score1, score2)) //List(6, 0)
println(getScores(List(17, 28, 30), List(99, 16, 8))) //List(2, 1)
注意:zip 最多只接受第一个集合中的元素。
def zip[A1 >: A, B, That](that: GenIterable[B])(implicit bf: CanBuildFrom[Repr, (A1, B), That]): That = {
val b = bf(repr)
val these = this.iterator
val those = that.iterator
while (these.hasNext && those.hasNext)
b += ((these.next(), those.next()))
b.result()
}
相关:Scala - Two Lists to Tuple List