从Scala中的可变HashSet中获取和删除任意元素

时间:2018-02-21 23:55:19

标签: scala set hashset

如何从Scala中的可变HashSet中获取和删除任意元素(类似于python set pop方法)? api的性能也会是什么?

2 个答案:

答案 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)

正如他所说,@ Andrey的回答应该足以回答你的问题 您可以使用.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)
....

列出方式

您可以执行上述SetList

如果您有HashSet

Set("first", "second", "third")

您可以通过执行

来弹出第二个元素
val hashList = hashSet.toList
hashList(hashList.indexOf("second"))

如果你想从HashSet删除第二个元素,那么

hashSet - hashList(hashList.indexOf("second"))

我希望答案很有帮助