目前尚不清楚如何从现有的Set中创建新的Set。
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 :(得分:3)
您可能已经尝试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的方法更有效吗?我不知道。但对于随意的读者来说,这可能会更加明显。
答案 1 :(得分:1)
复制(复制)Traversable的一般方法,只需迭代每个项目,
val v = s.map(identity)
答案 2 :(得分:0)
你几乎到了那里:
scala> val v = Set(s.toSeq: _*)
v: scala.collection.immutable.Set[Int] = Set(1, 2, 3)