Programing

지도 작업에서 튜플 풀기

lottogame 2020. 10. 26. 07:38
반응형

지도 작업에서 튜플 풀기


나는 종종 튜플의 Lists, Seqs 및 Iterators로 작업하고 있으며 다음과 같은 작업을하고 싶습니다.

val arrayOfTuples = List((1, "Two"), (3, "Four"))
arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 }

그러나 컴파일러는이 구문에 동의하지 않는 것 같습니다. 대신 나는 글을 쓰게됩니다.

arrayOfTuples.map { 
    t => 
    val e1 = t._1
    val e2 = t._2
    e1.toString + e2 
}

어리석은 일입니다. 이 문제를 어떻게 해결할 수 있습니까?


해결 방법은 다음을 사용하는 것입니다 case.

arrayOfTuples map {case (e1: Int, e2: String) => e1.toString + e2}

나는 tupled 함수를 좋아한다. 편리하고 중요한 것은 안전합니다.

import Function.tupled
arrayOfTuples map tupled { (e1, e2) => e1.toString + e2 }

왜 사용하지 않습니까

arrayOfTuples.map {t => t._1.toString + t._2 }

매개 변수가 여러 번 필요하거나 다른 순서로 필요하거나 중첩 된 구조에서 _가 작동하지 않는 경우,

arrayOfTuples map {case (i, s) => i.toString + s} 

짧지 만 읽을 수있는 형식 인 것 같습니다.


또 다른 옵션은

arrayOfTuples.map { 
    t => 
    val (e1,e2) = t
    e1.toString + e2
}

참고로 Dotty(재단 Scala 3) 파라미터 untupling가 확장 같은 구문을 허용되었습니다

// val tuples = List((1, "Two"), (3, "Four"))
tuples.map(_.toString + _)
// List[String] = List("1Two", "3Four")

여기서 각각 _은 연관된 튜플 부분을 참조합니다.

참고 URL : https://stackoverflow.com/questions/6905207/tuple-unpacking-in-map-operations

반응형