Удалите все элементы в PriorityQueue со значением меньше x

Есть ли способ удалить все элементы в очереди приоритетов scala со значением меньше указанного значения?

например.

val queue = scala.collection.mutable.PriorityQueue[Int]()
queue.enqueue(3)
queue.enqueue(5)
queue.enqueue(10)
queue.enqueue(8)
queue.removeAllLessThan(6)
println(queue) // PriorityQueue(10, 8)

Я знаю, что вы могли бы сделать это с помощью фильтра, но, похоже, был бы очень эффективный способ сделать это в куче.

Причина, по которой я хочу сделать это, состоит в том, чтобы сохранить низкий объем памяти для алгоритма A*.

1 ответ

В PriorityQueue порядок размещения преобладает для вставки, а именно новый элемент вставляется в положение, где порядок гарантирован. В этом случае используется порядок по умолчанию на Int (лучше чем),

queue.takeWhile(_ > 6)

выполняет итерации по очереди, пока держится предикат, в отличие от фильтра, который тщательно проверяет каждый элемент.

Другие вопросы по тегам