2010-01-01 12 views
25

मैं एक सेक से अपरिवर्तनीय सेट/मैप्स बनाने की कोशिश कर रहा हूं। मैं वर्तमान में कर रहा हूँ निम्नलिखित:एक सेक से एक अपरिवर्तनीय मानचित्र/सेट कैसे बनाएं?

val input: Seq[(String, Object)] = //..... 
Map[String, Object]() ++ input 

और सेट

val input: Seq[String] = //..... 
Set[String]() ++ input 

के लिए कौन सा एक छोटे से जटिल लगता है, वहाँ एक बेहतर तरीका है?

उत्तर

27

स्काला 2.8 में:

Welcome to Scala version 2.8.0.r20327-b20091230020149 (Java HotSpot(TM) Client VM, Java 1.6. 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> val seq: Seq[(String,Object)] = ("a","A")::("b","B")::Nil 
seq: Seq[(String, java.lang.Object)] = List((a,A), (b,B)) 

scala> val map = Map(seq: _*) 
map: scala.collection.immutable.Map[String,java.lang.Object] = Map(a -> A, b -> B) 

scala> val set = Set(seq: _*) 
set: scala.collection.immutable.Set[(String, java.lang.Object)] = Set((a,A), (b,B)) 

scala> 

संपादित 2010.1.12

मुझे लगता है सेट बनाने के लिए एक और अधिक आसान तरीका नहीं है।

scala> val seq: Seq[(String,Object)] = ("a","A")::("b","B")::Nil 
seq: Seq[(String, java.lang.Object)] = List((a,A), (b,B)) 

scala> val set = seq.toSet 
set: scala.collection.immutable.Set[(String, java.lang.Object)] = Set((a,A), (b,B)) 
+1

'वैल नक्शा = मानचित्र (सेक: _ *)' मुझे दिया है कि "स्केला महसूस" मेरे पेट अंडरस्कोर और सामान्य रूप में विशेष वर्ण में फिर से :) धन्यवाद –

+4

डूबना में? – ziggystar

+3

कृपया क्रिस के जवाब पर भी देखें, जिसमें toSet के अलावा टोपी है। – ziggystar

16

एक Map करने के लिए एक Seq बदलने के लिए, बस Seq पर toMap कहते हैं। ध्यान दें कि Seq के तत्व Tuple2 यानी होना चाहिए। (X,Y) या (X->Y)

scala> val seq: Seq[(String,String)] = ("A","a")::("B","b")::("C","c")::Nil 
seq: Seq[(java.lang.String, java.lang.String)] = List((A,a), (B,b), (C,c)) 

scala> seq.toMap 
res0: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map((A,a), (B,b), (C,c)) 

एक Set करने के लिए एक Seq बदलने के लिए, बस Seq पर toSet कहते हैं।

scala> val seq: Seq[String] = "a"::"b"::"c"::Nil 
seq: Seq[java.lang.String] = List(a, b, c) 

scala> seq.toSet 
res1: scala.collection.immutable.Set[java.lang.String] = Set(a, b, c) 
संबंधित मुद्दे