duc*_*thd 72 iterator scala tuples map iterable-unpacking
我经常发现自己与元组的列表,序列和迭代器一起工作,并希望做类似以下的事情,
val arrayOfTuples = List((1, "Two"), (3, "Four"))
arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 }
Run Code Online (Sandbox Code Playgroud)
但是,编译器似乎从不同意这种语法.相反,我最终写作,
arrayOfTuples.map {
t =>
val e1 = t._1
val e2 = t._2
e1.toString + e2
}
Run Code Online (Sandbox Code Playgroud)
这真是太傻了.我怎么能绕过这个?
Nic*_*las 124
解决方法是使用case:
arrayOfTuples map {case (e1: Int, e2: String) => e1.toString + e2}
Run Code Online (Sandbox Code Playgroud)
tho*_*dge 29
我喜欢tupled函数; 它既方便又简单,类型安全:
import Function.tupled
arrayOfTuples map tupled { (e1, e2) => e1.toString + e2 }
Run Code Online (Sandbox Code Playgroud)
use*_*own 16
你为什么不用
arrayOfTuples.map {t => t._1.toString + t._2 }
Run Code Online (Sandbox Code Playgroud)
如果您需要多个时间或不同顺序的参数,或者在嵌套结构中,_不起作用,
arrayOfTuples map {case (i, s) => i.toString + s}
Run Code Online (Sandbox Code Playgroud)
似乎是一个简短但可读的形式.
另一种选择是
arrayOfTuples.map {
t =>
val (e1,e2) = t
e1.toString + e2
}
Run Code Online (Sandbox Code Playgroud)
从 开始Scala 3,参数解组已得到扩展,允许这样的语法:
// val tuples = List((1, "Two"), (3, "Four"))
tuples.map(_.toString + _)
// List[String] = List("1Two", "3Four")
Run Code Online (Sandbox Code Playgroud)
其中每个_按顺序引用关联的元组部分。
| 归档时间: |
|
| 查看次数: |
33625 次 |
| 最近记录: |