2012-12-04 117 views
16

我有一个嵌套的元组结构,如(String,(String,Double)),我想将其转换为(String,String,Double)。我有各种嵌套的元组,我不想手动转换每个元组。有没有方便的方法来做到这一点?如何拼合一个嵌套元组?

回答

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。您也可以将隐式关键字添加到定义中。这只适用于三个元素。您可以拼合元组,如:

(1, ("hello", 42.0)) => (1, "hello", 42.0) 
(("test", 3.7f), "hi") => ("test", 3.7f, "hi") 

多层嵌套的元组不能被压扁在地,因为只有三人在返回类型元素:

((1, (2, 3)),4)  => (1, (2, 3), 4)