收藏中的元组

元组通常在集合中使用,但必须以特定方式处理它们。例如,给定以下元组列表:

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

使用隐式元组解包将元素添加到一起似乎很自然:

scala> l.map((e1: Int, e2: Int) => e1 + e2)

但是,这会导致以下错误:

<console>:9: error: type mismatch;
 found   : (Int, Int) => Int
 required: ((Int, Int)) => ?
              l.map((e1: Int, e2: Int) => e1 + e2)

Scala 不能以这种方式隐式解包元组。我们有两个选项来修复此地图。第一个是使用位置访问器 _1_2

scala> l.map(e => e._1 + e._2)
res1: List[Int] = List(3, 5, 7)

另一个选择是使用 case 语句使用模式匹配来解包元组:

scala> l.map{ case (e1: Int, e2: Int) => e1 + e2}
res2: List[Int] = List(3, 5, 7)

这些限制适用于应用于元组集合的任何高阶函数。