在Scala中复制位集(或其他集合)的构造函数
我需要从另一个位集对象(输入)创建位集类的新实例 我期望类似于在Scala中复制位集(或其他集合)的构造函数,scala,scala-collections,Scala,Scala Collections,我需要从另一个位集对象(输入)创建位集类的新实例 我期望类似于的新位集(输入),但没有找到。我可以用map()方法获得如下的新实例,但我认为这不是最好的解决方案 var r = input.map(_ + 0)(BitSet.canBuildFrom) 什么是位集的复制构造函数?Scala中复制构造函数的一般规则是什么?您可以使用第一个的位掩码创建另一个: var r = new BitSet(input.toBitMask) 可以使用第一个的位掩码创建另一个: var r = new Bi
的新位集(输入)
,但没有找到。我可以用map()方法获得如下的新实例,但我认为这不是最好的解决方案
var r = input.map(_ + 0)(BitSet.canBuildFrom)
什么是位集的复制构造函数?Scala中复制构造函数的一般规则是什么?您可以使用第一个的位掩码创建另一个:
var r = new BitSet(input.toBitMask)
可以使用第一个的位掩码创建另一个:
var r = new BitSet(input.toBitMask)
我认为,一般规则是使用不可变集合。它们是不可变的,因此您可以自由地传递它们,而无需特别注意复制它们 但是,当您需要可变集合时,复制集合就变得非常有用。我发现使用标准的
到方法是有效的:
scala> mutable.Set(1, 2, 3)
res0: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
scala> res0.to[mutable.Set]
res1: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
scala> res0 eq res1
res2: Boolean = false
但是,它不适用于位集
,因为它不是泛型集合,to
需要类型构造函数作为其泛型参数。对于位集
,可以使用Lee建议的方法。顺便说一句,它完全是为scala.collection.mutable.BitSet设计的,因为scala.collection.immutable.BitSet不包含这样的构造函数(也不需要它)。我认为,一般规则是使用不可变的集合。它们是不可变的,因此您可以自由地传递它们,而无需特别注意复制它们
但是,当您需要可变集合时,复制集合就变得非常有用。我发现使用标准的到方法是有效的:
scala> mutable.Set(1, 2, 3)
res0: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
scala> res0.to[mutable.Set]
res1: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
scala> res0 eq res1
res2: Boolean = false
但是,它不适用于位集
,因为它不是泛型集合,to
需要类型构造函数作为其泛型参数。对于位集
,可以使用Lee建议的方法。顺便说一句,它完全适用于scala.collection.mutable.BitSet
,因为scala.collection.immutable.BitSet
不包含此类构造函数(也不需要它)。集合上的“copy”方法称为clone
(与Java风格一致)
集合上的“复制”方法称为clone
(与Java风格一致)