2012-12-04 149 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)