2016-06-09 7 views
0

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

например.

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

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

ответ

1

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

queue.takeWhile(_ > 6) 

итерацию по очереди, а предикат имеет, в отличие от фильтра, который разглядывает каждую деталь.

 Смежные вопросы

  • Нет связанных вопросов^_^