2013-08-19 2 views
5

में दो फ़ील्ड के मानचित्र में ऑब्जेक्ट्स की सूची कैसे चालू करें, यहां मेरा असली मस्तिष्क भाग है। मैं प्ले फ्रेमवर्क के साथ काम कर रहा हूं। मेरे पास एक तरीका है जो एक नक्शा लेता है और इसे HTML चयन तत्व में बदल देता है। I में ऑब्जेक्ट्स की एक सूची लेने के लिए एक लाइनर था और इसे ऑब्जेक्ट के दो फ़ील्ड, id और name के मानचित्र में परिवर्तित कर दिया गया था। हालांकि, मैं एक जावा प्रोग्रामर हूं और मेरा स्कैला कमजोर है, और मैं केवल इतना ही चला गया हूं कि मैंने यह कैसे किया है इसके वाक्यविन्यास को भूल गए हैं।स्कैला

मैं

organizations.all.map {org => /* org.prop1, org.prop2 */ } 

की तरह कुछ किसी को भी टिप्पणी की भाग पूरा कर सकते थे?

उत्तर

9

मेरा सुझाव है:

map { org => (org.id, org.name) } toMap 

उदा

scala> case class T(val a : Int, val b : String) 
defined class T 

scala> List(T(1, "A"), T(2, "B")) 
res0: List[T] = List(T(1,A), T(2,B)) 

scala> res0.map(t => (t.a, t.b)) 
res1: List[(Int, String)] = List((1,A), (2,B)) 

scala> res0.map(t => (t.a, t.b)).toMap 
res2: scala.collection.immutable.Map[Int,String] = Map(1 -> A, 2 -> B) 
+1

और '.toMap', क्योंकि मूल प्रकार सूची –

+0

उस के लिए Thx है। नोट किया गया –

+0

वह लाइन है जिसे मैं भूल रहा था। ऐसी लचीली भाषा। – evanjdooner

5

तुम भी समीकरण से एक मध्यस्थ के List लेने के लिए और Map इस तरह के लिए सीधे जा सकते हैं:

case class Org(prop1:String, prop2:Int) 
val list = List(Org("foo", 1), Org("bar", 2)) 
val map:Map[String,Int] = list.map(org => (org.prop1, org.prop2))(collection.breakOut) 

निहित CanBuildFrom रूप collection.breakOut का उपयोग करके आप मूल रूप से इस प्रक्रिया में एक कदम को छोड़ करने की अनुमति देता List से Map प्राप्त करने का।

+1

मैंने आपका उत्तर यहां वास्तव में दिलचस्प पाया है, मैंने कभी ब्रेक के बारे में कभी नहीं सुना होगा ... fyi उन लोगों के लिए थोड़ी अधिक संदर्भ जानकारी भी सीखती है: http://stackoverflow.com/questions/1715681/scala-2-8-breakout – LaloInDublin

+0

सलाह के लिये धन्यवाद। हालांकि, मैंने आपकी लाइन 'list.map (org => (org.prop1, org.prop2)) (collection.breakOut)' के एक प्रकार का उपयोग करने की कोशिश की, एक स्कैला एचटीएमएल टेम्पलेट में, लेकिन यह टाइप 'स्काला' का ऑब्जेक्ट देता है। collection.immutable.IndexedSeq [(स्ट्रिंग, स्ट्रिंग) '। मैंने जो कोड इस्तेमाल किया है वह 'Organization.all.map (org => (org.id.toString, org.name)) (collection.breakOut) 'जहां' Organization.all()' जावा विधि है एक 'सूची <संगठन>' देता है। – evanjdooner

+1

@evanjdooner, क्या आपने वैल या var टाइप किया था जिसके परिणामस्वरूप आप परिणाम दे रहे थे। मेरे उदाहरण के रूप में एक मानचित्र के रूप में इसे समाप्त करने के लिए इसे स्पष्ट रूप से टाइप किया जाना चाहिए। – cmbaxter