在地图操作中元组拆包

我经常发现自己在处理元组的列表,序列和迭代器,并且想要做如下的事情,

val arrayOfTuples = List((1, "Two"), (3, "Four")) arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 } 

然而,编译器似乎从来没有认同这个语法。 相反,我最终写作,

 arrayOfTuples.map { t => val e1 = t._1 val e2 = t._2 e1.toString + e2 } 

这是愚蠢的。 我怎样才能解决这个问题?

解决办法是用case

 arrayOfTuples map {case (e1: Int, e2: String) => e1.toString + e2} 

我喜欢tupled函数; 这既方便又重要,types安全:

 import Function.tupled arrayOfTuples map tupled { (e1, e2) => e1.toString + e2 } 

你为什么不使用

 arrayOfTuples.map {t => t._1.toString + t._2 } 

如果您需要多次或不同顺序的参数,或者在嵌套结构中_不起作用,

 arrayOfTuples map {case (i, s) => i.toString + s} 

似乎是一个简短的,但可读的forms。

另一个select是

 arrayOfTuples.map { t => val (e1,e2) = t e1.toString + e2 }