2014-11-25 3 views
2

이 작업은 매우 쉬워야하지만 완전히 조립할 수는 없습니다. 나는 문자열 목록을 가져 와서 첫 번째 목록에서 각 접미사가 다른 두 요소를 포함하는 새 목록을 만들고 싶습니다. 그래서 : 스칼라 : 각 요소가 이전 목록의 요소 인 새 목록을 만듭니다.

List("a", "b", "c") -> List("a_x", "a_y", "b_x", "b_y", "c_x", "c_y" 

나는
val list2 = list1.map(i=> i+"_x", i+"_y") 

을 시도했지만 스칼라 내가 너무 많은 인수를했다고 말했다. 이 사랑 받고 :

val list2 = list1.map(i=> (i+"_x", i+"_y")) 

하지만 목록을 생성 (("a_x는", "a_y"), ("b_x는", "b_y"), ("c_x는", "c_y은")) 어떤없는 것입니다 내가 원하는. 나는 분명히 뭔가를 놓친다.

답변

6

첫 번째 맵에 flatMap을 입력하고 결과의 구조를 평면 목록으로 전개합니다. 이해의와

scala> List("a", "b", "c").flatMap(i => List(i + "-x", i + "-y")) 
res0: List[String] = List(a-x, a-y, b-x, b-y, c-x, c-y) 
+0

고마워요! 나는 그것이 단지 나를 피하는 바보 같은 것이었다는 것을 알았다. –

6

:

scala> val prefixes = List("a", "b", "c") 
prefixes: List[String] = List(a, b, c) 

scala> val suffixes = List("x", "y") 
suffixes: List[String] = List(x, y) 

scala> for (prefix <- prefixes; suffix <- suffixes) yield prefix + "_" + suffix 
res1: List[String] = List(a_x, a_y, b_x, b_y, c_x, c_y) 

이 기본적 세스 Tisue의 대답은 단지 문법 설탕입니다 각 개별 결과는 그 자체가 모음 (안 튜플)이어야합니다.

관련 문제