如何从Scala中的可变HashSet中获取和删除任意元素(类似于python set pop方法)? api的性能也会是什么?
答案 0 :(得分:2)
要从可变散列集中提取和删除未定义顺序的元素,请尝试head
和-=
的组合(删除):
import scala.collection.mutable.HashSet
def pop[A](hs: HashSet[A]): A = {
val a = hs.head
hs -= a
a
}
val example = HashSet.empty[Int] ++ (0 to 9)
while (!example.isEmpty) {
val p = pop(example)
println("Pop element: " + p)
}
我不确定它是否在内部缓存任何键或哈希,但是它只是O(1)
或摊销O(1)
。
答案 1 :(得分:1)
.head
函数弹出元素。
以下是一些更多细节。
Sets
是Scala的集合库之一,它提供了可变和不可变的方法。如果您希望从Sets
中删除特定元素,则可以使用-
和+
方法。 -
方法用于从Set
中删除元素,并返回新的Set
。类似地,+
方法用于在Set
中添加元素,该元素也会返回添加了元素的新Set
。因此,您可以编写 pop 和 set 函数来删除和添加特定元素。
def popFromSet[T](set: Set[T], stringToPop: T) = {
set - stringToPop
}
def setToSet[T](set: Set[T], stringToPop: T) = {
set + stringToPop
}
你可以将它们用作
popFromSet(stringSet, "second")
setToSet(popFromSet(stringSet, "second"), "second2")
popFromSet(intSet, 2)
....
列出方式
您可以执行上述Set
至List
如果您有HashSet
Set("first", "second", "third")
您可以通过执行
来弹出第二个元素val hashList = hashSet.toList
hashList(hashList.indexOf("second"))
如果你想从HashSet
删除第二个元素,那么
hashSet - hashList(hashList.indexOf("second"))
我希望答案很有帮助