Фильтр Scala ArrayBuffer на основе очереди

У меня есть Arraybuffer, который содержит Int. Кроме того, у меня есть очередь, которая также содержит Int. Я хотел бы удалить из моего Arraybuffer все Int, которые также присутствуют в моей очереди. Какой эффективный способ сделать это. Могу ли я использовать функцию фильтра с чем-то вроде:

newArray = Arraybuffer.filter(_ not in Queue)

3 ответа

Решение

Я бы использовал 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)

Да, ты можешь:

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

a.filter(!q.contains(_))
Другие вопросы по тегам