基于队列的 Scala Filter ArrayBuffer

Scala Filter ArrayBuffer based on a Queue

我有一个包含 Int 的 Arraybuffer。除此之外,我还有一个包含 Int 的队列。我想从我的 Arraybuffer 中删除队列中也存在的所有 Int。什么是执行此操作的有效方法。我可以使用 Filter 函数吗:

newArray = Arraybuffer.filter(_ not in Queue)

是的,您可以:

val q: Queue[Int] = ???
val a: ArrayBuffer[Int] = ???

a.filter(!q.contains(_))

我会为此使用 Set[A],尤其是当您的 ArrayBuffer[Int] 足够大时:

val queue = Queue[Int] = ???
val arrayBuffer: ArrayBuffer[Int] = ???

val set = queue.toSet

val filteredBuffer = arrayBuffer.filterNot(set.contains)

如果您的数组缓冲区包含唯一的整数(我们可以通过将其转换为集合来强制执行此操作),那么 diff 函数就是您想要的。

val queue: Queue[Int] = Queue(1,2,3)
val array: ArrayBuffer[Int] = ArrayBuffer(1,2,3,4,5,6)

array.toSet.diff(queue)  // ArrayBuffer(4,5,6)