Scala 从另一个集合初始化集合

Scala initialize set from another 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))

您快完成了:

scala> val v = Set(s.toSeq: _*)
v: scala.collection.immutable.Set[Int] = Set(1, 2, 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 的方法更有效吗?我不知道。但对于不经意的人来说可能更明显一些 reader.

一种复制(复制)Traversable 的通用方法,只需遍历每个项目,

val v = s.map(identity)