2013-03-04 94 views
3

我有一些变量,并且我想通过在函数中运行每个变量来创建新变量。所以基本上我目前有在scala中使列表解构为一个元组,或者使一个元组迭代成一个列表

val formatted1 = format(raw1) 
val formatted2 = format(raw2) 
val formatted3 = format(raw3) 

有没有办法在一行中做到这一切?寻找类似

val (formatted1, formatted2, formatted3) = (raw1, raw2, raw3).map(format) 

但这似乎是以不兼容的方式结合列表的功能和元组的功能。

回答

12

可以映射在元组,但如果你把你的物品清单:

val List(formatted1, formatted2, formatted3) = List(raw1, raw2, raw3).map(format) 

这与许多其他收藏品一样,序列,数组等等(两边的类型必须相同!但你可以在左边有更多的一般类型:例如)。

对于列表(而不是其他类型的),你也可以写这样的事:

val formatted1::formatted2::formatted3::Nil = List(raw1, raw2, raw3).map(format) 

从斯卡拉2.10开始,你可以用序列进行同样的伎俩:

val formatted +: formatted2 +: formatted3 +: _ = .... 
+0

完美,我我会在12分钟内接受你的答案:) – 2013-03-04 19:50:03

+0

根据你是否在Seh或List或Array上lhs和/或rhs有没有性能差异?编译速度差异? – 2013-03-04 20:07:22

+0

这样的事情通过[提取器](http://www.artima.com/pins1ed/extractors.html)完成,特别是通过'unapplySeq',所以我猜对于Arrays会有一些**非常小的**影响将它们包装在IndexedSeq中)。 – 2013-03-04 20:18:07

相关问题