2012-12-04 14 views
16

मेरे पास एक नेस्टेड ट्यूपल संरचना है जैसे (String,(String,Double)) और मैं इसे (String,String,Double) में बदलना चाहता हूं। मेरे पास विभिन्न प्रकार के नेस्टेड टुपल हैं, और मैं मैन्युअल रूप से प्रत्येक को बदलना नहीं चाहता हूं। क्या ऐसा करने का कोई सुविधाजनक तरीका है?एक नेस्टेड ट्यूपल कैसे फ़्लैट करें?

उत्तर

21

आप shapeless उपयोग करते हैं, this वास्तव में क्या है आप Tupple तरह समतल कर सकते हैं आपको चाहिए, मुझे लगता है।

6

टुपल पर कोई फ्लेटन नहीं है। लेकिन अगर आप संरचना को जानते हैं, तो आप ऐसा कुछ कर सकते हैं:

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) 

यह किसी भी प्रकार के साथ टुपल को फटकार देगा। आप परिभाषा में अंतर्निहित कीवर्ड भी जोड़ सकते हैं। यह केवल तीन तत्वों के लिए काम करता है।

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

एकाधिक नेस्टेड Tupple, भूमि पर समतल नहीं किया जा सकता क्योंकि वहाँ वापसी प्रकार में केवल तीन तत्व हैं::

((1, (2, 3)),4)  => (1, (2, 3), 4) 
संबंधित मुद्दे