2012-01-18 8 views
4

나는 Map[String,String]과 제 3 자 함수가 있어야합니다. Map[String,Seq[String]] 변환 할 수있는 쉬운 방법이 있나요? 함수에 맵을 전달할 수 있습니까? mapValues는지도보기를 반환하므로 기능 (Seq(_)가) 요소에 액세스 할 때마다 다시 계산됩니다문자열에서 Seq [String]으로 변환하는 방법

답변

9
original.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

+2

+1 뷰 평가 의미에 관한 팁. – missingfaktor

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)) 
관련 문제