튜플

2011-08-01 6 views
60

내가 자주 튜플

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

그러나, 컴파일러는이 구문에 동의하는 것 결코 자신 튜플의 목록, Seqs 및 반복자와 협력하고 다음과 같은 일을하고 싶습니다 찾기 . 대신, 나는 결국 글을 쓰고,

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

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

답변

99

업무용 주위 case을 사용하는 것입니다

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

정확히 내가 필요한 것! – duckworthd

+23

그리고 튜플 요소를 입력 할 필요조차 없습니다. case (e1, e2) => 튜플 요소의 타입을 알고 있으면 충분하다. –

7

또 다른 옵션은 매개 변수를 여러 시간을 필요로하는 경우

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

이것은 [허용 대답] (https://stackoverflow.com/a/6905231/833844)의 읽기 쉽지 않은 형식입니다. –

11

가 왜

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

를 사용하지 않는 것입니다, 또는 다른 순서로 또는 중첩 된 구조에서 _이 작동하지 않는 경우

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

은 짧지 만 읽을 수있는 형식입니다.

+0

주된 이유는 대부분이 맵 함수의 처리가'_.toString + _'보다 훨씬 복잡하고't._1' 및't._2 '보다 더 이해하기 쉬운 이름을 조작하려고하기 때문입니다 '. – Nicolas

+0

그럼'arrayOfTuples map {case (i, s) => i.toString + s}'가 더 편리합니다. 그러나 필요한 질문에 대해서는 질문을해야합니다. :) –

+0

글쎄, 그가 "자주"라고 말했을 때, 나는 "다른 경우에"나는 당신이 자주 Int + String 매핑을 필요로하지 않는 시나리오를 보지 않기를 바란다. ;) – Nicolas

23

나는 tupled 함수를 좋아합니다. 편리 할뿐만 아니라 타입 안전도 있습니다 :

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