2014-03-13 4 views
-1

List("123", "456")List('1', '2', '3', '4', '5', '6')으로 변환하려고합니다. 내 현재의 구현이다 : 그것은 작동하지만 두 번 같은 목록을 가야문자열 목록을 Chars 목록으로 변환하십시오.

def convert(strings: List[String]): List[Char] = { 
    val tmp = strings map (s => s.toList()) 
    tmp reduceLeft ((s1, s2) => s1 ::: s2) 
} 

(목록에 각 문자열을 구문 분석하고, 모든 목록을 병합). 목록을 한 번만 통과 할 수있는 또 다른 방법이 있습니까? 나는 reduce을 사용할 필요가 있다고 생각하지만 그것을하는 방법을 모른다.

편집 : 클래스 A의 객체를 얻고 목록의 어떤 종류를 반환하는 방법 주어진 : 나는이 질문을하고 그것이 내가 일하고 있어요 문제와 관련 있기 때문에 reduce이 사용하고자하는 이유 클래스 B의 객체는 A의 목록을 B의 목록으로 변환하는 방법을 찾는다. 그래서 문자열이나 문자와 관련이없는 대답을 찾고있다.

+4

실제 질문이나 목표에 대해서는 as.flatMap (_. getBs)를 원한다. 이것은 'flatMap'이 무엇을위한 것입니다. ('as'는 객체'A'의리스트이고'getBs'는 변환을 수행하는 메소드입니다 (여기서'A'의 메소드라고 가정하고, 그렇지 않으면'_.'을 생략하십시오). –

답변

3

어웨이 정보 : List ("123 ","456 "). 평평한

scala> List("123", "456") 
res0: List[java.lang.String] = List(123, 456) 

scala> res0.flatten 
res1: List[Char] = List(1, 2, 3, 4, 5, 6) 

이것은 표준이다. tail-recursive solution :

scala> res0.foldLeft(List.empty[Char])((accumulator, next) => accumulator ::: next.toList) 
res2: List[Char] = List(1, 2, 3, 4, 5, 6) 
관련 문제