Фильтр 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(_))