2012-12-04 2 views
16

나는 (String,(String,Double)) 같은 중첩 된 튜플 구조를하고 난 (String,String,Double)로 변환 할 수 있습니다. 나는 다양한 종류의 중첩 된 튜플을 가지고 있으며, 수동으로 각각 변환하려고하지 않습니다. 거기에 편리한 방법이 있습니까?중첩 된 튜플을 병합하는 방법은 무엇입니까?

답변

21

은 당신처럼 Tupple을 평평하게 할 수 있습니다 너는 필요하다고 생각해.

6

는 Tupple에 평평에는 없습니다. 그러나 구조를 아는 경우 다음과 같이 할 수 있습니다.

implicit def flatten1[A, B, C](t: ((A, B), C)): (A, B, C) = (t._1._1, t._1._2, t._2) 
implicit def flatten2[A, B, C](t: (A, (B, C))): (A, B, C) = (t._1, t._2._1, t._2._2) 

이렇게하면 모든 유형의 Tupple을 평평하게합니다. 정의에 내재적 키워드를 추가 할 수도 있습니다. 이것은 세 가지 요소에 대해서만 작동합니다.

는 반환 형식 만 세 가지 요소가 있기 때문에 Tupple이 땅에 평평 할 수없는 중첩 된 여러
(1, ("hello", 42.0)) => (1, "hello", 42.0) 
(("test", 3.7f), "hi") => ("test", 3.7f, "hi") 

: : this 정확히 무엇을 당신이 shapeless를 사용하는 경우

((1, (2, 3)),4)  => (1, (2, 3), 4) 
관련 문제