Scala-订购PriorityQueue失败

问题描述 投票:0回答:1

我正在尝试在Scala中创建一个简单的优先级队列:

val priorities: mutable.PriorityQueue[Priority] = mutable.PriorityQueue(
 Priority(2, 302),
 Priority(3, 300),
 Priority(5, 400),
 Priority(4, 309),
 Priority(1, 301)
)(Ordering.by[Priority, Int](_.priority).reverse)

case class Priority(priority: Int, value: Int)

而当我这样做时priorities.foreach(p => println(p.priority, p.value))

我期望的输出是:

(1,301)
(2,302)
(3,300)
(4,309)
(5,400)

但是我得到:

(1,301)
(2,302)
(5,400)
(4,309)
(3,300)

如您所见,订购存在一些问题。请问我在哪里出错了,我应该怎么做才能获得所需的输出?

scala priority-queue
1个回答
3
投票

foreach方法处理PriorityQueue的所有元素,但不一定按排序顺序处理。如果删除元素,则可以看到排序正常:

while (priorities.nonEmpty) println(priorities.dequeue())

Priority(1,301)
Priority(2,302)
Priority(3,300)
Priority(4,309)
Priority(5,400)

该实现将第一个元素保留为最高优先级元素,但其余元素未排序。 dequeue将把新的最高优先级元素放到最前面。

似乎没有一种无损显示顺序显示整个PriorityQueue的方法。

© www.soinside.com 2019 - 2024. All rights reserved.