使用模式匹配提取列表中的元组及单个元素
解决方案:同时提取完整元组与拆分元素
当然可以实现!在Scala的模式匹配里,你可以借助@符号,同时绑定完整元组和拆分后的各个元素,这样既能用拆分后的day/month/year做字符串拼接,也能直接引用整个元组对象。
修改后的代码示例
val lst = List((12, "aug", 2016), (13, "jun", 2016)) lst.foreach { case fullTuple @ (day, month, year) => println(s"Tpl is $fullTuple,拆分后: ($day, $month, $year)") }
运行结果
Tpl is (12,aug,2016),拆分后: (12, aug, 2016) Tpl is (13,jun,2016),拆分后: (13, jun, 2016)
原理说明
这里的@符号是Scala模式匹配里的变量绑定语法:
fullTuple @ (day, month, year)表示:当匹配到一个三元组时,既把整个元组赋值给fullTuple变量,同时把元组的三个元素分别赋值给day、month、year。- 这样你就可以根据需求,灵活使用完整元组或者拆分后的单个元素了。
如果你只是想在原有打印逻辑的基础上保留完整元组的引用,直接把你的代码修改成下面这样就行:
lst.foreach { case fullTuple @ (day, month, year) => println(s"Tpl is ($day, $month, $year),完整元组是: $fullTuple") }
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

