Scala Filter ArrayBuffer基于队列

时间:2016-11-29 16:00:00

标签: scala filter queue arraybuffer

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

newArray = Arraybuffer.filter(_ not in Queue)

3 个答案:

答案 0 :(得分:2)

我会使用Set[A],尤其是ArrayBuffer[Int]足够大时:

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

val set = queue.toSet

val filteredBuffer = arrayBuffer.filterNot(set.contains)

答案 1 :(得分:2)

如果您的数组缓冲区包含唯一的int(我们可以通过将其转换为集合来强制执行此操作),那么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)

答案 2 :(得分:1)

是的,你可以:

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

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