2010-01-01 51 views
25

我嘗試從Seq構建不可變集/圖。我目前做如下:如何從seq創建不可變的映射/集合?

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

'VAL地圖=地圖(SEQ:_ *)'給我說,「斯卡拉的感覺」在我的肚子再次:)謝謝 – 2011-01-03 16:54:30

+4

淹沒在一般的下劃線和特殊字符? – ziggystar 2011-04-12 11:07:40

+3

請看看Chris的回答,除了toSet之外,還有哪些功能toMap。 – ziggystar 2011-04-12 11:08:46

16

要將Seq轉換爲Map,只是呼籲SeqtoMap。請注意,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)) 

要將Seq轉換爲Set,只是呼籲SeqtoSet

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)