में मनमानी संग्रह-संग्रह का स्थानांतरण करना मुझे अक्सर स्कैला में "आयताकार" संग्रह-संग्रह का स्थानांतरण करना पड़ता है, उदाहरण के लिए: मानचित्रों की एक सूची, सूचियों का नक्शा, मानचित्र का मानचित्र, सूचियों का एक सेट , सेट का नक्शा इत्यादि। चूंकि संग्रह को एक विशिष्ट डोमेन से एक सह-डोमेन में मैपिंग के रूप में समान रूप से देखा जा सकता है (उदाहरण: एक सूची [ए]/ऐरे [ए] इंट डोमेन से एक सह- डोमेन, सेट [ए] एक डोमेन से बूलियन सह-डोमेन इत्यादि में मैपिंग है), मैं एक ट्रांज़ेक्शन ऑपरेशन करने के लिए एक स्वच्छ, जेनेरिक फ़ंक्शन लिखना चाहता हूं (उदाहरण के लिए: सूचियों के मानचित्र को ट्रांसपोज़ में बदलें मानचित्रों की सूची)। हालांकि, मुझे परेशानी हो रही है क्योंकि() ऑपरेटर के अलावा, स्कैला में मैपिंग के रूप में संग्रह को देखने के लिए एक एकीकृत API नहीं लगता है?स्कैला
तो मैं अंत में इस प्रकार संग्रह के- संग्रह के प्रत्येक प्रकार के लिए एक अलग पक्षांतरित लेखन:
def transposeMapOfLists[A,B](mapOfLists: Map[A,List[B]]) : List[Map[A,B]] = {
val k = (mapOfLists keys) toList
val l = (k map { mapOfLists(_) }) transpose;
l map { v => (k zip v) toMap }
}
def transposeListOfMaps[A,B](listOfMaps: List[Map[A,B]]) : Map[A,List[B]] = {
val k = (listOfMaps(0) keys) toList
val l = (listOfMaps map { m => k map { m(_) } }) transpose;
(k zip l) toMap
}
def transposeMapOfMaps[A,B,C](mapOfMaps: Map[A,Map[B,C]]) : Map[B,Map[A,C]] = {
val k = (mapOfMaps keys) toList
val listOfMaps = k map { mapOfMaps(_) }
val mapOfLists = transposeListOfMaps(listOfMaps)
mapOfLists map { p => (p._1, (k zip p._2) toMap) }
}
किसी की मदद कर सकते हैं मुझे एक सामान्य संग्रह के- संग्रह में इन तरीकों को एकजुट स्थानांतरित? यह मेरी मदद करेगा (और मुझे यकीन है कि दूसरों) प्रक्रिया में कुछ उपयोगी स्काला सुविधाओं को सीखेंगे।
ps: मैंने अपवाद हैंडलिंग को अनदेखा कर लिया है और माना है कि इनपुट संग्रह-संग्रह संग्रह आयताकार है, यानी, सभी आंतरिक संग्रह 'डोमेन तत्व एक ही सेट का गठन करते हैं।
धन्यवाद - यह बहुत उपयोगी है! आपने यह समझने में काफी समय लगाया कि आपने क्या किया है क्योंकि मैं आपके द्वारा उपयोग की जाने वाली स्कैला की कुछ उन्नत विशेषताओं से परिचित नहीं हूं (अब इन सुविधाओं को और अधिक विस्तार से सीखना मेरे लिए बहुत अच्छा बहाना है!)। – Ashwin