2012-12-04 8 views
16

Ich habe eine verschachtelte Tupel-Struktur wie (String,(String,Double)) und ich möchte es in (String,String,Double) umwandeln. Ich habe verschiedene Arten von verschachtelten Tupel, und ich möchte nicht jedes manuell transformieren. Gibt es einen bequemen Weg, das zu tun?Wie flacht man ein verschachteltes Tupel ab?

Antwort

6

Es gibt keine Abflachung auf einem Tupple. Aber wenn Sie die Struktur kennen, können Sie etwas tun wie folgt:

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) 

Dies wird Tupple mit jeder Art abflachen. Sie können der Definition auch das implizite Schlüsselwort hinzufügen. Dies funktioniert nur für drei Elemente. Sie können Tupel wie abflachen:

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

mehrere verschachtelte Tupel kann nicht auf den Boden flach, da es nur drei Elemente in dem Rückgabetyp ist:

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