2012-01-18 51 views

回答

9
original.mapValues(Seq(_)) 

注意mapValues返回地圖視圖,因此函數(Seq(_))將每一個元件被訪問的時間重新計算。爲了避免這種情況,只需使用普通map

original.map{ case (k,v) => (k, Seq(v)) } 

用法:

scala> val original = Map("a" -> "b", "c" -> "d") 
original: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(a -> b, c -> d) 

scala> original.mapValues(Seq(_)) 
res1: scala.collection.immutable.Map[java.lang.String,Seq[java.lang.String]] = Map(a -> List(b), c -> List(d)) 
+0

感謝您的幫助! – chiappone 2012-01-18 18:44:58

+2

+1關於視圖評估語義的提示。 – missingfaktor 2012-01-18 20:08:56

2

您可以通過使用:->從Scalaz避免一些重複代碼。

如果tTuple2,f <-: t :-> g相當於(f(t._1), g(t._2))

scala> import scalaz._, Scalaz._ 
import scalaz._ 
import Scalaz._ 

scala> val m = Map(1 -> 'a, 2 -> 'b) 
m: scala.collection.immutable.Map[Int,Symbol] = Map(1 -> 'a, 2 -> 'b) 

scala> m.map(_ :-> Seq.singleton) 
warning: there were 1 deprecation warnings; re-run with -deprecation for details 
res15: scala.collection.immutable.Map[Int,Seq[Symbol]] = Map(1 -> List('a), 2 -> List('b)) 

scala> m.map(_ :-> (x => Seq(x))) 
res16: scala.collection.immutable.Map[Int,Seq[Symbol]] = Map(1 -> List('a), 2 -> List('b)) 
相關問題