在地图操作中元组拆包
我经常发现自己在处理元组的列表,序列和迭代器,并且想要做如下的事情,
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 }