(यह this Q&A के एक संस्करण है)संग्रह को मानचित्र-दर-कुंजी में बदलने का सबसे अच्छा तरीका है? (2 संस्करण)
मैं इस राशि कहते हैं:
List("foo", "bar", "spam")
मैं एक मानचित्र जिसके लिए कुंजी स्ट्रिंग की लंबाई है बनाना चाहते हैं, और मूल्य है उस स्ट्रिंग के सभी स्ट्रिंग्स का संग्रह। दूसरे शब्दों में, के बारे में सूची को देखते हुए, हम पाते हैं:
Map(3 -> List(foo, bar), 4 -> List(spam))
कोड मैं यह करने के लिए लिखा गया है:
list.foldLeft(Map[Long, List[String]]()) {
(m, s) => m(s.length) = s ::
(if (m.contains(s.length)) m(s.length)
else Nil)
}
यह काम करता है, लेकिन यह करने के लिए कुरूपता का एक बहुत कहते हैं सुरुचिपूर्ण उत्तर डैनियल स्पिवाक ने मूल प्रश्न (उपरोक्त संदर्भित) को प्रदान किया।
कोई भी विचार मेरे संस्करण के लिए समाधान को बेहतर बनाने के लिए कैसे?
धन्यवाद! शॉन
मुझे अंतिम संस्करण बदसूरत नहीं लगता है, अगर वैल लंबाई को वैल एल के रूप में छोटा किया जाता है। स्कैला में एकल अक्षर चर अक्सर गणितीय सूत्रों के समान शैली में स्कैला में उपयोग किए जाते हैं, यानी आप प्लेसहोल्डर चर का अर्थ घोषित करते हैं, और फिर इसका उपयोग करें। क्योंकि इससे बहुत कम अभिव्यक्तियां होती हैं (अक्सर एक लाइनर), संक्षिप्त नाम जिसे अन्य भाषाओं में गुप्त माना जाएगा, अभ्यास में कोई समस्या नहीं है। – Palimondo
@Palimondo यह लंबाई नहीं है जो मुझे परेशान करती है। मैं दो बयान में गणना को तोड़ने से नापसंद करता हूं। दुर्भाग्यवश, स्काला मूल्य का पुन: उपयोग करने के लिए 's.length' को अनुकूलित नहीं कर सकता, जैसा कि हास्केल होगा। –