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)
不清楚如何从现有集合创建新集合。
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)