我一直在寻找如何将 ArrayBuffer
转换为 Set
,更准确地说是转换为 HashSet
。有什么提示吗?
我一直在寻找如何将 ArrayBuffer
转换为 Set
,更准确地说是转换为 HashSet
。有什么提示吗?
ArrayBuffer 中已经实现了一个 toSet
函数。
示例:
scala> import collection.mutable.ArrayBuffer
import collection.mutable.ArrayBuffer
scala> import collection.immutable.HashSet
import collection.immutable.HashSet
scala> val a = new ArrayBuffer(2)
a: scala.collection.mutable.ArrayBuffer[Nothing] = ArrayBuffer()
scala> val b = a.toSet
b: scala.collection.immutable.Set[Nothing] = Set()
设置:
scala> val bf = ArrayBuffer(1,2,3,4)
bf: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4)
scala> bf.toSet
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)
To HashSet:
scala> val hs = new HashSet[Int]++ bf.toSet
hs: scala.collection.immutable.HashSet[Int] = Set(1, 2, 3, 4)
toSet
会使用专门的类来处理少于5个元素的 Set
,而不是使用 HashSet
:ArrayBuffer(1,2,3,4).toSet.isInstanceOf[HashSet[_]] == false
,ArrayBuffer(1,2,3,4,5).toSet.isInstanceOf[HashSet[_]] == true
。 - soc为了完整起见,再介绍一种方式:
scala> import collection.mutable.ArrayBuffer
import collection.mutable.ArrayBuffer
scala> val as = ArrayBuffer(34, 89, 11)
as: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(34, 89, 11)
scala> Set(as: _*)
res13: scala.collection.immutable.Set[Int] = Set(34, 89, 11)
toSet
则会更容易些。 - Daniel C. Sobral