स्कैला में, groupBy()
पर एक संग्रह पर कॉलिंग Map
देता है जहां मान संग्रह होते हैं, लेकिन मुझे MultiMap
चाहिए। रूपांतरण करने का सबसे आसान तरीका क्या है? क्या मैं एक नया MultiMap
बनाने और सब कुछ कॉपी करने से बच सकता हूं?क्या मुझे स्कैला विशेषता में मिश्रण करने के लिए एक नई वस्तु बनाना है?
6
A
उत्तर
5
मुझे लगता है कि "क्या मुझे स्केल विशेषता में मिश्रण करने के लिए एक नई वस्तु बनाना है?" हां है"। आप कुछ को लपेटने वाली वस्तुओं और निहित रूपांतरणों के साथ दर्द को कम कर सकते हैं।
अपने विशिष्ट समस्या के लिए, मैं GroupBy (...) मजबूर करने के लिए परिवर्तनशील सेट है, जो आप "मल्टीमैप साथ MapProxy" के साथ लपेट करने की आवश्यकता होगी करने के लिए एक परिवर्तनशील नक्शे को वापस करने में असमर्थ था।
package blevins.example
object App extends Application {
implicit def multiMapable[B](c: Iterable[B]) = new {
def groupByMM[A](f: B => A) = {
import scala.collection.mutable._
val ret = new HashMap[A,Set[B]] with MultiMap[A,B]
for (e <- c) { ret.addBinding(f(e), e) }
ret
}
}
val c = List(1,2,3,4,5,6,7,8,9)
val mm = c.groupByMM { i => if (i < 5) "alpha" else "beta" }
mm.addBinding("alpha",12)
println(mm) // Map(beta -> Set(5, 7, 6, 9, 8), alpha -> Set(3, 1, 4, 2, 12))
}
परिशिष्ट
यहाँ है एक मौजूदा मानचित्र लपेटकर [स्ट्रिंग, सेट का एक उदाहरण: लेकिन, यह नहीं कोड की भी कई लाइनों "GroupBy" के अपने स्वयं के संस्करण को लागू करने की है [इंट]] एक मल्टीमैप में मूल्यों को कॉपी किए बिना:
object App extends Application {
import scala.collection.mutable._
val seed: Map[String,Set[Int]] = Map("even" -> Set(2,4,6), "odd" -> Set(1,3,5))
val multiMap = new MapProxy[String,Set[Int]] with MultiMap[String,Int] {
val self = seed
}
multiMap.addBinding("even", 8)
println(multiMap) // Map(odd -> Set(5, 3, 1), even -> Set(6, 8, 4, 2))
}
ध्यान दें कि यह GroupBy का परिणाम (...) क्योंकि बीज नक्शा ख के लिए आवश्यक है पर नहीं किया जा सकता ई mutable और groupby (...) एक अपरिवर्तनीय मानचित्र देता है।
संबंधित मुद्दे
- 1. क्या मुझे रिपोर्ट की जाने वाली हर नई बग के लिए एक नई शाखा बनाना चाहिए?
- 2. उदाहरण के लिए एक विशेषता में मिश्रण कैसे करें?
- 3. स्कैला में गतिशील मिश्रण - क्या यह संभव है?
- 4. क्या मुझे प्रत्येक दावे के लिए एक नई परीक्षा विधि बनाना चाहिए?
- 5. कैसे जावास्क्रिप्ट में एक नई वस्तु बनाने के लिए?
- 6. एक विशेषता में मिश्रण करते समय एक अज्ञात वर्ग क्यों बनाया जाता है?
- 7. एक नई तालिका बनाने के लिए केवल एक ट्रिगर बनाना
- 8. स्कैला में मोनैड विशेषता
- 9. क्या मुझे प्रत्येक मॉडल के लिए एक इंटरफेस बनाना चाहिए?
- 10. स्कैला की तुलनात्मक विशेषता क्या है?
- 11. क्या एक गैर-नई वस्तु को हटाना संभव है?
- 12. स्कैला: मिश्रण मिश्रण की कक्षा कैसे प्राप्त करें?
- 13. यह मुहावराला स्कैला है। एक बयान को कम करने के लिए एक def बनाना?
- 14. स्कैला में एक सीलबंद विशेषता पर इटरेशन?
- 15. एक सीलबंद विशेषता क्या है?
- 16. वसंत एओपी परिचय के साथ मिश्रण बनाना
- 17. क्या मिश्रण Xaml संपादक क्षैतिज बनाना संभव है?
- 18. क्या यह 'एक ही पैकेज में वर्ग और इंटरफेस मिश्रण' करने के लिए बुरा अभ्यास है?
- 19. शीर्षक विशेषता में नई पंक्ति?
- 20. बनाना InetAddress वस्तु जावा
- 21. एक विशेषता को तत्काल करने का क्या अर्थ है?
- 22. Linq नई वस्तु
- 23. क्या यह एक आरटीओएस और चक्रीय कार्यकारी मिश्रण करने के लिए समझ में आता है?
- 24. स्कैला कंपाइलर प्लगइन में एक नई कक्षा कैसे जोड़ें?
- 25. स्कैला में एसओएपी-प्रॉक्सी - मुझे क्या चाहिए?
- 26. एक नई विंडो खोलने के बिना एक ट्वीट बटन बनाना
- 27. स्कैला प्रिंटल ऐप विशेषता
- 28. प्रत्येक दिन एक नई लॉग फ़ाइल बनाना
- 29. जाँच एक वस्तु विशेषता निर्धारित करता है, तो है - SimpleXML
- 30. स्कैला एक्सएमएल: ब्रेस विशेषता
कॉलिंग समूह द्वारा() और एक परिवर्तनीय संग्रह एक mutable वापस करता है। मैप। –
क्या आप समूह को प्रदर्शित कर सकते हैं एक म्यूटेबल मानचित्र लौट रहे हैं? मुझे यहां एक कंपाइलर त्रुटि मिलती है जैसे कि यहां दिखाया गया है (http://gist.github.com/245062)। –
मुझे लगता है कि यह mutable सेट का एक अपरिवर्तनीय मानचित्र देता है? भले ही, मुझे एक नक्शा नहीं चाहिए, मुझे एक मल्टीमैप चाहिए। –