2013-03-04 34 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

相關問題