복붙노트

[SCALA] 스칼라 - 하나의 목록으로 목록의 변환 목록 : 목록 [목록 [A] 목록 [A]에

SCALA

스칼라 - 하나의 목록으로 목록의 변환 목록 : 목록 [목록 [A] 목록 [A]에

스칼라 (2.9)에서리스트의 목록을 변환하는 가장 좋은 방법은 무엇입니까?

나는 목록을 가지고 :

List[List[A]]

이는 내가로 변환 할

List[A]

어떻게 그 재귀 적으로 달성 할 수 있는가? 아니면 다른 더 좋은 방법은 무엇입니까?

해결법

  1. ==============================

    1.목록은 패턴 화 된 방법이있다. 왜 그것을 사용?

    목록은 패턴 화 된 방법이있다. 왜 그것을 사용?

    List(List(1,2), List(3,4)).flatten
    > List(1,2,3,4)
    
  2. ==============================

    2.위의 예를 감안할 때, 나는 당신이 재귀가 필요하지 않다. 외모는 대신 List.flatten을 원하는 좋아한다.

    위의 예를 감안할 때, 나는 당신이 재귀가 필요하지 않다. 외모는 대신 List.flatten을 원하는 좋아한다.

    EG

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

    3..flatten 분명히 가장 쉬운 방법이지만, 완성도 또한 flatMap에 대해 알아야 할

    .flatten 분명히 가장 쉬운 방법이지만, 완성도 또한 flatMap에 대해 알아야 할

     val l = List(List(1, 2), List(3, 4))
     println(l.flatMap(identity))
    

    과에 대한-이해 동등한

     println(for (list <- l; x <- list) yield x)
    

    펼치기 분명히 훨씬 더 많은 작업을 수행 할 수 있습니다 flatMap의 특별한 경우이다.

  4. ==============================

    4.당신의 구조가 더 중첩 될 수 있다면, 같은 :

    당신의 구조가 더 중첩 될 수 있다면, 같은 :

    List(List(1, 2, 3, 4, List(5, 6, List(7, 8))))
    

    이 기능은 당신에게 욕망의 결과를 제공한다 :

    def f[U](l: List[U]): List[U] = l match {
      case Nil => Nil
      case (x: List[U]) :: tail => f(x) ::: f(tail)
      case x :: tail => x :: f(tail)
    }
    
  5. ==============================

    5.당신은 재귀가 필요하지 않습니다하지만 당신이 원하는 경우에 당신은 그것을 사용할 수 있습니다 :

    당신은 재귀가 필요하지 않습니다하지만 당신이 원하는 경우에 당신은 그것을 사용할 수 있습니다 :

    def flatten[A](list: List[List[A]]):List[A] = 
      if (list.length==0) List[A]() 
      else list.head ++ flatten(list.tail)
    

    이 목록에 패턴 화 된 방법 빌드처럼 작동합니다. 예:

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

    6.당신이 flatmap를 사용하려면, 여기에 방법입니다

    당신이 flatmap를 사용하려면, 여기에 방법입니다

    , 목록에 평면을에 당신이 목록 [지능]라는 이름의 LL의 목록을 가지고 있고, 당신이 원하는 것을 가정 많은 사람들이 이미 쉬운 방법이 당신에게 같은 펼치기로 답변을 제공합니다. 난 당신이 flatmap 방법을 사용하여 요구한다고 가정합니다. 이 경우라면, 여기에 방법입니다

    ll.flatMap(_.map(o=>o))
    
  7. from https://stackoverflow.com/questions/12600863/scala-convert-list-of-lists-into-a-single-list-listlista-to-lista by cc-by-sa and MIT license