2015-05-28 87 views
1

目前還不清楚如何從現有的創建一個新的設置。斯卡拉初始化設置從另一組

scala> val s = Set(1,2,3) 

嘗試添加S直接在構造函數中:

scala> val v = Set(s) 
v: scala.collection.mutable.Set[scala.collection.mutable.Set[Int]] = Set(Set(1, 2, 3)) 

嗯,這是一個嵌套集..

所以讓我們嘗試把每一個元素:

val v = Set[Int](s:_*) 
<console>:13: error: type mismatch; 
found : scala.collection.mutable.Set[Int] 
required: Seq[Int] 
     val v = Set[Int](s:_*) 

列表如何?

val v = Set( s.toList) 
v: scala.collection.mutable.Set[List[Int]] = Set(List(1, 2, 3)) 

回答

0

你幾乎到了那裏:

scala> val v = Set(s.toSeq: _*) 
v: scala.collection.immutable.Set[Int] = Set(1, 2, 3) 
+0

啊哈!謝謝。現在硬了 – javadba

2

您可能已經嘗試過toSet,發現你只是得到相同Set,但另一種選擇是使用to[Col[_]],傳遞Set作爲Col[_]給你一套新:

scala> val s = Set(1, 2, 3) 
scala> System.identityHashCode(s) 
    res0: Int = 908978764 

scala> val v = s.toSet 
scala> System.identityHashCode(v) 
    res1: Int = 908978764    // No good - same object 

scala> val w = s.to[Set] 
scala> System.identityHashCode(w) 
    res2: Int = 1069495836    // New object 

它比@ dk14的方法更有效嗎?我不知道。但對於不經意的讀者來說,這可能更爲明顯一點。

+0

你的應該會更快 – dk14

1

的通用方法複製(複製)一Traversable,簡單地通過遍歷每個項目,

val v = s.map(identity)